ena*_*naJ 5 python csv python-3.x
我想使用 Python 3 读取每行由换行符 ('\n') 指示的 csv 文件。这是我的代码:
import csv
with open(input_data.csv, newline ='\n') as f:
csvread = csv.reader(f)
batch_data = [line for line in csvread]
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了错误:
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?
Run Code Online (Sandbox Code Playgroud)
阅读这些帖子: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]
Run Code Online (Sandbox Code Playgroud)
还没有得到正确的运气。有什么建议?
我也在阅读有关换行符的文档?如果未指定 newline='',则嵌入在引用字段中的换行符将不会被正确解释,并且在写入时使用 \r\n 行的平台上将添加一个额外的 \r。指定 newline='' 应该始终是安全的,因为 csv 模块执行自己的(通用)换行处理。
所以我对这个换行方法的理解是:
1)这是必需品,
2)它是否表示输入文件将被空格字符分成几行?
Sha*_*ger 10
newline=''在所有csv情况下都是正确的,而未能指定它在许多情况下是错误的。文档推荐它的原因正是您遇到的原因。
newline=''并不意味着“空白空间”用于拆分;它特别记录在open函数上:
如果
[newline]是 '',则启用通用换行符模式,但行尾会返回给调用者未翻译。
因此,newline=''所有原始字符\r和\n字符都保持不变。通常,在通用换行符模式下,任何像序列 ( \r, \n, 或\r\n)这样的换行符都会\n在输入中转换为。但是对于 CSV 输入,您不希望这样做,因为 CSV 方言通常对换行符的构成非常挑剔(\r\n仅Excel 方言需要)。
你的代码应该是:
import csv
with open('input_data.csv', newline='') as f:
csvread = csv.reader(f)
batch_data = list(csvread)
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,您需要查看您的 CSV 方言并确保您csv.reader正确初始化。
| 归档时间: |
|
| 查看次数: |
29338 次 |
| 最近记录: |