Python – 使用分割记录清理 CSV 文件

我有一个分隔文件,其中某些字段包含行终止字符。它们可以是 LF 或 CR/LF。


行终止符导致记录分成多行。


我的目标是读取文件,删除行终止字符,然后写出一个在字段周围用引号引起来的分隔文件。


输入记录示例:


444,2018-04-06,19:43:47,43762485,"Request processed"CR\LF


555,2018-04-30,19:17:56,43762485,"Added further note:LF


email customer a receipt" CR\LF 

第一个记录没问题,但第二个记录有 LF(换行),导致记录折叠。


import csv


with open(raw_data, 'r', newline='') as inp, open(csv_data, 'w') as out:

    csvreader = csv.reader(inp, delimiter=',', quotechar='"')

    for row in csvreader:

        print(str(row))

        out.write(str(row)[1:-1] + '\n') 

我的代码几乎可以工作,但我认为它不正确。


我得到的输出是:


['444', '2020-04-06', '19:43:47', '344376882485', 'Request processed']


['555', '2020-04-30', '19:17:56', '344376882485', 'Added further note:\nemail customer a receipt']

我使用子字符串删除行开头和结尾处的方括号,我认为这不是正确的方法。请注意,第二条记录中的新行字符已转换为 \n。我想知道如何摆脱它,并将 csv 编写器合并到代码中以在字段周围放置双引号。


为了删除行终止符,我尝试更换但没有成功。


(row.replace('\r', '').replace('\n', '') for row in csvreader) 

我还尝试合并一个 csv 编写器,但无法使其与列表一起使用。


任何意见,将不胜感激。


侃侃无极
浏览 124回答 1
1回答

长风秋雁

这段代码可以满足您的需求:with open('raw_data.csv', 'r', newline='') as inp, open('csv_data.csv', 'w') as out:    reader = csv.reader(inp, delimiter=',', quotechar='"')    writer = csv.writer(out, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)    for row in reader:        fixed = [cell.replace('\n', '') for cell in row]        writer.writerow(fixed)引用所有单元格是通过传递csv.QUOTE_ALL作为作者的“引用”参数来处理的。线路fixed = [cell.replace('\n', '') for cell in row]创建一个新的单元格列表,其中嵌入的'\n'字符被空字符串替换。默认情况下,Python 会将行尾设置为平台的默认值。如果您想覆盖它,您可以将行终止符参数传递给编写器。对我来说,原始的 csv 看起来很好:在引用的单元格内嵌入换行符(“软换行符”)是正常的,并且 csv 感知应用程序应该像电子表格一样正确处理它们。然而,它们在不理解 csv 格式的应用程序中看起来会是错误的,因此将嵌入的换行符视为实际的行尾字符。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python