当前位置: 首页 > 面试题库 >

要从CSV删除空白行吗?

微生耘豪
2023-03-14
问题内容

我有一个很大的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()

可以吗?或者有更好的方法吗?


问题答案:

使用csv模块:

import csv
...

with open(in_fnam) as in_file:
    with open(out_fnam, 'w') 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中,这样做将导致错误。



 类似资料:
  • 问题内容: 该被删除空行的第一个条件而已,我怎么会确保每个条件的脚本删除空行? 问题答案: 将以下条件放入第一个条件中,并使用语句检查它们,如下所示:

  • 我遇到了损坏的CSV问题,它在图像链接中有空白。 CSV文件由我的客户业务合作伙伴自动创建,约22000行。CSV中大约有30个链接被破坏,我无法修复。因为它每3小时更新一次。 所以,我试图想出一个自动的解决方案,但似乎没有任何效果。 问题在于图像链接,如以下链接:https://images.tyroo.de/GISLAVED_ULTRA_SPEED2�.jpg 它以前有空间。一些文件有3个空格

  • 用于从CSV中删除空白列的Powershell脚本 我有一个电子表格,我正在将其导入MySQL数据库,由于电子表格中的空白列,导入失败。 是否有一个PowerShell脚本,我可以运行/创建,将检查任何给定的CSV文件并删除空白列? Col1,Col2,Col3,Col4,,,Val1,Val2,Val3,Val4

  • 我有一个有3000行的excel文件。我删除了2000(用ms excel应用程序),但是当我从代码中调用sheet.getLastRowNum()时,它给我3000(而不是1000)...我如何删除空白行? 我尝试从这里的代码,但它不工作......

  • 问题内容: 我需要在PHP中删除空白行(带空格或绝对空白)。我使用此正则表达式,但不起作用: 我想要一个结果: 将: 问题答案: 上面的正则表达式说:

  • 问题内容: 我想使用golangs regexp替换所有空白行和仅用空格/制表符填充的行。我以为下面的regexp应该可以解决问题, ^\s*$ 但令我惊讶的是,行首和行尾regexp标签不起作用。它们似乎表示整个字符串的开始/结束,而不仅仅是字符串中的一行,请参阅 https://play.golang.org/p/WZ4flVtDMN 我在这里想念什么吗? 编辑: Wiktors的回答几乎使我