在使用Python读取csv时指定换行符(' \ n')

时间:2016-11-07 23:47:17

标签: python python-3.x csv

我想阅读一个csv文件,其中每行由换行符(' \ n')使用Python 3指示。这是我的代码:

import csv
with open(input_data.csv, newline ='\n') as f:
        csvread = csv.reader(f)
        batch_data = [line for line in csvread]

上面的代码给出了错误:

batch_data = [line for line in csvread].
_csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?

阅读这些帖子:CSV new-line character seen in unquoted field error,也尝试了我能想到的这些替代方案:

with open(input_data.csv, 'rU', newline ='\n') as f:
        csvread = csv.reader(f)
        batch_data = [line for line in csvread]


with open(input_data.csv, 'rU', newline ="\n") as f:
        csvread = csv.reader(f)
        batch_data = [line for line in csvread]

没有好运这个正确的。有什么建议吗?

我还在阅读documentation about newline:如果换行=''未指定,嵌入在引用字段中的换行符将无法正确解释,并且在使用\ r \ n行写入的平台上将添加额外的\ r \ n。指定newline =''应始终是安全的,因为csv模块会执行自己的(通用)换行处理。

所以我对这种换行方法的理解是:

1)这是必要的,

2)是否表示输入文件将被空格字符拆分成行?

1 个答案:

答案 0 :(得分:4)

  1. newline=''在所有csv个案例中都是正确的,并且在许多情况下未能指定它是错误的。文档会因为您遇到的原因而推荐它。

  2. newline=''并不代表"空白空间"用于分裂;它特别documented on the open function

  3.   

    如果[newline]是'',则启用通用换行模式,但行结尾将返回给调用者未翻译。

    因此,newline=''所有原始\r\n字符都会保持不变。通常,在通用换行模式下,任何换行符(\r\n\r\n)都会在输入中转换为\n。但是你不希望这个用于CSV输入,因为CSV方言通常非常挑剔构成换行符的内容(Excel方言仅需要\r\n)。

    您的代码应为:

    import csv
    with open('input_data.csv', newline='') as f:
        csvread = csv.reader(f)
        batch_data = list(csvread)
    

    如果这不起作用,您需要查看CSV方言,并确保正确初始化csv.reader