zoukankan      html  css  js  c++  java
  • Python数据分析基础——读写CSV文件

      1.基础python代码:

     1 #!/usr/bin/env python3  # 可以使脚本在不同的操作系统之间具有可移植性
     2 
     3 import sys  # 导入python的内置sys模块,使得在命令行中向脚本发送附加的输入
     4 # sys模块的argv参数,传递给python脚本的命令行参数列表,也就是我们运行的脚本的输入文件和写入csv格式的输出文件
      # 用命令行读取CSV的输入文件和写入CSV格式的输出的文件
      # 用命令行输入: python script_name.py  "C:path oinput_file.csv"  "C:path ooutput_file.csv"
              python 告诉计算机使用Python程序来处理其他的命令行参数。Python收集其余参数,放入argv这个列表
              列表中的第一个元素argv[0]用作脚本名称,所以argv[0]表示script_name.py
              python将argv[1],即第二个命令行参数————"C:path oinput_file.csv",即输入文件的路径和文件名赋值给变量,input_file
              python将argv[2],即第三个命令行参数————"C:path ooutput_file.csv",即输入文件的路径和文件名赋值给变量,output_file
     5 input_file = sys.argv[1]
     6 output_file = sys.argv[2]
     7 
     8 with open(input_file, 'r', newline = '') as filereader:  #  with语句,使用with语句,将input_file打开为一个文件对象filereader;'r'表示是只读模式
     9     with open(output_file, 'w', newline = '') as filewriter:  #  with语句,使用with语句,将output_file打开为一个文件对象filewriter;'w'表示可写模式;with语句可以在语句结束时,自动关闭文件对象
    10         header = filereader.readline()  #  使用文件对象的readline方法,读取输入文件扥第一行数据,将读入得字符串
    11         header = header.strip()  #  使用strip函数去除每行两端的空格、制表符和换行符
    12         header_list = header.split(',')  #  使用split函数用逗号,将字符串拆分成一个列
    13         print(header_list)
    14         filewriter.write(','.join(map(str, header_list)) + '
    ')  #  string模块未spring
      15         for row in filereader:
    16             row = row.strip()
    17             row_list = row.split(',')
    18             print(row_list)
    19             filewriter.write(','.join(map(str, row_list)) + '
    ')

      2.pandas:

          

    #!/usr/bin/env python3
     
    
    import sys
    import pandas as pd
    
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    #``data_frame_数据框是一种存储数据的方式,数据框中保留了“表格”这种数据组织方式;pandas中下嵌套pandas脑,所以要使用数据框,必须导入pandas包                          
    data_frame = pd.read_csv(input_file)
    
    print(data_frame)
    
    data_frame.to_csv(output_files, pandas_output_csv)

    但是,以上代码,当读取数据$1,006,015.00时,会出错,具体错误为:本来应该将数据$1,006,015.00,分割为:$1,006,015.00,现在,结果却为:"$1",“006”,“015.00”

    其原因,在于,CSV文件的存储形式,即为,使用逗号“,”分割一列列数据的分隔符,正是逗号“,”例如:Name, Age, $100.00, "Beijing"

    所以,读取操作CSV文件时,是利用逗号","来分割各列的数据,但是当现在出现了数据:$2,000,00.00,由于数据中也含逗号,所以导致该数据整体本身被分割成,$2  000   00.00三份数据,

    出现错误。

    解决方案:使用CSV模块——python内置CSV模块,即被设计用于正确地处理数据值中的嵌入逗号和其他复杂模式的

     1 #!/usr/bin/env python3
     2 import csv
     3 import sys
     4 
     5 input_file = sys.argv[1]
     6 output_file = sys.argv[2]
     7 
     8 with open(input_file, 'r', newline = ' ') as csv_in_file:
     9     with open(output_file, 'w', newline = ' ') as csv_out_file:
    10         filereader = csv.reader(csv_in_file, delimiter = ',')  #  使用CSV模块中的reader函数,创建了一个文件读取对象filereader,,用于读取输入文件的行
    11         filewriter = csv.writer(csv_out_file, delimiter = ',')  #  使用CSV模块中的writer函数,创建了一个文件读取对象filewriter,用于将数据输出文件
                                                参数delimiter是默认分隔符
    12 for row_list in filereader: 13 print(row_list) 14 filewriter.writerow(row_list)  #  将filewriter对象中的每行列表值,用writerow函数,写入输出文件
  • 相关阅读:
    【LOJ6041】「雅礼集训 2017 Day7」事情的相似度(用LCT维护SAM的parent树)
    【BZOJ1171】大sz的游戏(线段树+单调队列)
    2019年4月训练记录(4.07~4.22)
    【BZOJ4766】文艺计算姬(prufer序列)
    【BZOJ4573】[ZJOI2016] 大森林(LCT)
    2019.03.19 ZJOI2019模拟赛 解题报告
    【牛客挑战赛30D】小A的昆特牌(组合问题抽象到二维平面)
    【洛谷2624】[HNOI2008] 明明的烦恼(Python+利用prufer序列结论求解)
    【洛谷2290】[HNOI2004] 树的计数(Python+利用prufer序列结论求解)
    初识prufer序列
  • 原文地址:https://www.cnblogs.com/tommyngx/p/8732421.html
Copyright © 2011-2022 走看看