Python中CSV文件的换行符混淆问题

5
我有以下Python代码。它读取一个csv文件并将第一列输出到一个新的csv文件。
但问题在于我的csv文件中除了用于创建新行的换行符之外,还有\n。但它们被包含在双引号内。
例如像这样:
A, B, C,
D, "12
34", E,
F, G, H

所以我认为我需要在某个地方添加quotechar='"',但是我无法弄清楚。

f_in = open('source.csv')

fields = []

for line in f_in.readlines():
    fields.append([item.strip('\n') for item in line.split(',')])
f_in.close()

f_out = open('sourceNew.csv', 'w')

for i in range(len(fields)):
    if fields[i][0] != '':
        f_out.write(fields[i][0] + ',,\n')


f_out.close()

如何区分真正的新行和被双引号包裹的新行。

谢谢。

3个回答

8
使用 Python CSV 模块:
import csv

records = []
reader = csv.reader(open('source.csv', 'rb'))

for record in reader:
    print record
    records.append(record)

我希望这可以帮到你。


1
@Lafada,感谢您的编辑。一个合适的超链接看起来更好。 - jimhark
使用输入的问题和这个脚本,输出结果是4个单独的数组,除非我漏掉了什么... ['A', ' B', ' C', ''] ['D', ' "12'] ['34"', ' E', ''] ['F', ' G', ' H'] - Erik
1
使用csv.reader (open('source.csv'), quotechar='"'),指定quotechar有助于解决问题。请参阅带完整代码的OPs答案。 - jimhark

0

是的,它做到了。

import csv

f_in  = csv.reader (open('source.csv'), quotechar='"')

fields = []

for line in f_in:
    fields.append(line)

f_out = open('sourceNew.csv', 'w')

for i in range(len(fields)):
    if fields[i][0] != '':
        f_out.write(fields[i][0] + ',,\n')


f_out.close()import csv

f_in  = csv.reader (open('source.csv'), quotechar='"')

fields = []

for line in f_in:
    fields.append(line)

f_out = open('sourceNew.csv', 'w')

for i in range(len(fields)):
    if fields[i][0] != '':
        f_out.write(fields[i][0] + ',,\n')


f_out.close()

谢谢。


0

在 Python 3 中做这件事的正确方法是使用 newline=''。正如您所看到的 csv documentation 和示例一样。它们在打开文件时始终使用 newline=''

import csv
with open('some.csv', 'w', newline='') as f:

来自脚注

[1] (1, 2) 如果未指定newline='',则引号字段内嵌的换行符将无法正确解释,并且在写入时使用\r\n行尾的平台上会添加额外的\r。始终指定newline=''应该是安全的,因为csv模块会处理其自己的(通用)换行符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接