Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python–;使用拆分记录清理CSV文件_Python_Python 3.x_Csv - Fatal编程技术网

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

Python–;使用拆分记录清理CSV文件,python,python-3.x,csv,Python,Python 3.x,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

我有一个带分隔符的文件,其中一些字段包含行终止字符。它们可以是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编写器,但无法使其与列表一起工作


如果您有任何建议,我们将不胜感激。

此片段符合您的要求:

打开('raw_data.csv','r',换行='')作为输入,打开('csv_data.csv','w')作为输出:
reader=csv.reader(inp,分隔符=',',引号='”)
writer=csv.writer(out,分隔符=',',quotechar=''',quoting=csv.QUOTE_ALL)
对于读取器中的行:
fixed=[cell.replace('\n','')用于行中的单元格]
writer.writerow(已修复)
引用所有单元格作为编写器的“引用”参数进行传递

线路

fixed = [cell.replace('\n', '') for cell in row]
创建一个新的单元格列表,其中嵌入的
'\n'
字符将替换为空字符串

默认情况下,Python会将行尾设置为平台的默认值。如果您想覆盖它,您可以将一个参数传递给编写器

对我来说,原始的csv似乎很好:在引用的单元格中嵌入换行符(“软换行符”)是正常的,支持csv的应用程序应该能够正确处理它们,因为电子表格能够正确处理它们。但是,在不理解csv格式的应用程序中,它们看起来是错误的,因此将嵌入的换行符视为实际的行尾字符