我有一个分隔文件,其中某些字段包含行终止字符。它们可以是 LF 或 CR/LF。行终止符导致记录分成多行。我的目标是读取文件,删除行终止字符,然后写出一个在字段周围用引号引起来的分隔文件。输入记录示例:444,2018-04-06,19:43:47,43762485,"Request processed"CR\LF555,2018-04-30,19:17:56,43762485,"Added further note:LFemail customer a receipt" CR\LF 第一个记录没问题,但第二个记录有 LF(换行),导致记录折叠。import csvwith 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 编写器,但无法使其与列表一起使用。任何意见,将不胜感激。
1 回答
长风秋雁
TA贡献1757条经验 获得超7个赞
这段代码可以满足您的需求:
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 格式的应用程序中看起来会是错误的,因此将嵌入的换行符视为实际的行尾字符。
添加回答
举报
0/150
提交
取消