无法格式化巨大的csv文件并通过python写入文件

时间:2015-09-29 15:49:02

标签: python python-2.7 csv

我有300 MB的大尺寸CSV文件。如果有单列,我需要读取文件并删除行;如果有一个单词" cloud"在第四栏。所以我写了一个脚本,它首先读取并写入对另一个csv有效的数据。

首先,我写了一个生成器来读取数据,因为文件大小非常大

def gen_csv(file_name):
  with open(file_name, 'rb') as csvfile:
   csvfile.seek(0)
   datareader =  csv.reader(csvfile, delimiter=',')
   for row in datareader:
     yield row

并调用编写器函数

def format_csv(r_list):
  gzip_list = []
  for report in r_list:
    outputfile = report[:-4]+"-output.csv"
    with open(outputfile, 'wb') as firstcsv:
      firstcsv.seek(0)
      firstwriter = csv.writer(firstcsv, delimiter=',')
      for row in gen_csv(report):
        if len(row) == 1:
          continue
        elif row[3] == "Label":
          firstwriter.writerow(row)
        elif row[3].find('Cloud') > 0:
          firstwriter.writerow(row)
        else: pass

    firstcsv.close()

但新CSV文件只有一行代表第一张CSV的第一行。

提前致谢

编辑::

我发现我所犯的错误是选择礼仪行的逻辑错误。

1 个答案:

答案 0 :(得分:1)

您可以使用Pandas

代码示例:

1-.
import pandas as pd
df = pd.read_csv("to_remove.csv")
keep_cols = ["Name", "Address"]
new_df = df[keep_cols]
new_df.to_csv("removed.csv", index=False) 


2.- 
df = pd.read_csv("your.csv", index_col=[0,1], skipinitialspace=True)
df.drop('column_name', axis=1, inplace=True)