从 CSV 中删除空白行?

新手上路,请多包涵

我有一个很大的 csv 文件,其中有些行是完全空白的。如何使用 Python 从 csv 中删除所有空白行?

在你提出所有建议之后,这就是我到目前为止所拥有的

import csv

# open input csv for reading
inputCSV = open(r'C:\input.csv', 'rb')

# create output csv for writing
outputCSV = open(r'C:\OUTPUT.csv', 'wb')

# prepare output csv for appending
appendCSV = open(r'C:\OUTPUT.csv', 'ab')

# create reader object
cr = csv.reader(inputCSV, dialect = 'excel')

# create writer object
cw = csv.writer(outputCSV, dialect = 'excel')

# create writer object for append
ca = csv.writer(appendCSV, dialect = 'excel')

# add pre-defined fields
cw.writerow(['FIELD1_','FIELD2_','FIELD3_','FIELD4_'])

# delete existing field names in input CSV
# ???????????????????????????

# loop through input csv, check for blanks, and write all changes to append csv
for row in cr:
    if row or any(row) or any(field.strip() for field in row):
        ca.writerow(row)

# close files
inputCSV.close()
outputCSV.close()
appendCSV.close()

这样可以吗,还是有更好的方法来做到这一点?

原文由 debugged 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

使用 csv 模块:

 import csv
...

with open(in_fnam, newline='') as in_file:
    with open(out_fnam, 'w', newline='') as out_file:
        writer = csv.writer(out_file)
        for row in csv.reader(in_file):
            if row:
                writer.writerow(row)

如果您还需要删除所有字段都为空的行,请将 if row: 行更改为:

 if any(row):

如果您还想将仅包含空格的字段视为空字段,您可以将其替换为:

 if any(field.strip() for field in row):


请注意,在 Python 2.x 及更早版本中, csv 模块需要二进制文件,因此您需要使用 e 'b' 标志打开文件。在 3.x 中,这样做会导致错误。

原文由 Laurence Gonsalves 发布,翻译遵循 CC BY-SA 4.0 许可协议

很惊讶这里没有人提到 pandas 。这是一个可能的解决方案。

 import pandas as pd
df = pd.read_csv('input.csv')
df.to_csv('output.csv', index=False)

原文由 Sagun Shrestha 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏