我想阅读一个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)是否表示输入文件将被空格字符拆分成行?
答案 0 :(得分:4)
newline=''
在所有csv
个案例中都是正确的,并且在许多情况下未能指定它是错误的。文档会因为您遇到的原因而推荐它。
newline=''
并不代表"空白空间"用于分裂;它特别documented on the open
function:
如果
[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
。