python csv模块如何理解行尾与换行
这更多的是要求解释csv模块如何真正理解来自文件的数据。我不太明白有一个怪癖,我曾经遇到过几次,特别是与新行字符有关的怪癖 使用以下代码:python csv模块如何理解行尾与换行,python,csv,file-io,newline,Python,Csv,File Io,Newline,这更多的是要求解释csv模块如何真正理解来自文件的数据。我不太明白有一个怪癖,我曾经遇到过几次,特别是与新行字符有关的怪癖 使用以下代码: with open(filename, 'rbU') as inCsvFile: for row in csv.reader(inCsvFile): print repr(row) 我打印了以下几行 ['ID', 'AFTADM', 'AFTORD', 'AFTREM', 'AFTOTH', 'AFTOTX', 'COMM'] ['
with open(filename, 'rbU') as inCsvFile:
for row in csv.reader(inCsvFile):
print repr(row)
我打印了以下几行
['ID', 'AFTADM', 'AFTORD', 'AFTREM', 'AFTOTH', 'AFTOTX', 'COMM']
['3', '2', '2', '2', '2', '', 'New, had to look up']
['3', '2', '2', '2', '2', '', 'Percieved complexity']
['3', '2', '2', '2', '2', '', 'Stress per se']
['3', '2', '2', '2', '2', '', 'no records']
['10', '2', '1', '2', '2', '', 'Please ignore the crossouts!\nMix-up, very late start\nCould not get database to work -- unable to view data']
['10', '2', '2', '2', '2', '', '']
['10', '2', '2', '2', '2', '', '']
['10', '1', '1', '2', '2', '', '']
['10', '2', '2', '2', '2', '', '']
['10', '2', '2', '2', '2', '', '']
['11', '1', '1', '1', '1', 'viewed results', '']
['11', '2', '2', '2', '2', '', '']
['11', '2', '2', '2', '2', '', '']
['11', '2', '2', '2', '2', '', '']
['11', '2', '2', '2', '2', '', '']
['11', '2', '2', '2', '2', '', '']
['12', '2', '1', '2', '2', '', '']
['12', '', '', '', '', '', '']
['12', '2', '2', '2', '1', 'emailed', '']
...
具体来说,我感兴趣的一行是:
['10', '2', '1', '2', '2', '', 'Please ignore the crossouts!\nMix-up, very late start\nCould not get database to work -- unable to view data']
如果我尝试在没有csv模块的情况下使用以下代码处理此问题:
with open(filename, 'rbU') as inFile:
for row in inFile:
print repr(row)
这将它视为一个文本流,最后我将一行变成三行:
'10,2,1,2,2,,"Please ignore the crossouts!\n'
'Mix-up, very late start\n'
'Could not get database to work -- unable to view data"\n'
我知道是换行符做的,但是csv模块如何理解行尾,而不被换行符绊倒呢
我是否可以使用特定的代码(无需重新设计csv模块)来处理此类场景,而无需使用csv.reader
任何想要查看我正在讨论的数据文件的人的文件内容:
该列被引用。该列以
“
开头,以另一列结尾。这两个引号之间的所有内容都被识别为一列:
"Please ignore the crossouts!\n
Mix-up, very late start\n
Could not get database to work -- unable to view data"
编写CSV文件时,模块还将在需要时使用引号,除非您告诉它使用;您可以将其设置为、或常量:
>>> import csv
>>> import sys
>>> writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL)
>>> writer.writerow([5, 'spam', 'foo\nbar'])
"5","spam","foo
bar"
>>> writer = csv.writer(sys.stdout, quoting=csv.QUOTE_MINIMAL)
>>> writer.writerow([5, 'spam', 'foo\nbar'])
5,spam,"foo
bar"
>>> writer = csv.writer(sys.stdout, quoting=csv.QUOTE_NONNUMERIC)
>>> writer.writerow([5, 'spam', 'foo\nbar'])
5,"spam","foo
bar"
>>> writer = csv.writer(sys.stdout, quoting=csv.QUOTE_NONE)
>>> writer.writerow([5, 'spam', 'foo\nbar'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
_csv.Error: need to escape, but no escapechar set
导入csv
>>>导入系统
>>>writer=csv.writer(sys.stdout,quoting=csv.QUOTE_ALL)
>>>writer.writerow([5,'spam','foo\nbar']))
“5”、“垃圾邮件”、“foo”
酒吧“
>>>writer=csv.writer(sys.stdout,quoting=csv.QUOTE_最小值)
>>>writer.writerow([5,'spam','foo\nbar']))
5、垃圾邮件,“foo”
酒吧“
>>>writer=csv.writer(sys.stdout,quoting=csv.QUOTE_非数字)
>>>writer.writerow([5,'spam','foo\nbar']))
5、“垃圾邮件”、“foo”
酒吧“
>>>writer=csv.writer(sys.stdout,quoting=csv.QUOTE_NONE)
>>>writer.writerow([5,'spam','foo\nbar']))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
_csv.错误:需要转义,但未设置转义
请注意,当禁用引号并尝试使用换行符写入值时,模块实际上是如何发出错误的
读取时应用相同的常量;
csv模块将引用标记之间的所有内容解释为字符串的一部分,甚至换行。使用源代码:-)导入csv;打印csv.\uuuuu文件\uuuuu
并在您的收藏夹中打开它editor@FredrikPihl:您必须查看C模块。@stoves请在文本编辑器中打开CSV文件,并查看那条著名的行。现在,CSV文件中的行看起来像什么?它是一个嵌入了换行符(“\n”)表示形式的字符串,或者是否存在真正的ASCII字符0X0A,并且您可以在文本编辑器中看到逻辑记录拆分为多个物理行?@GBOFI:它们是真实的,因为生成的Python列表包含实际的换行符。否则它们将被转义到'\\n'
@MartijnPieters好的,明白了(过了一会儿:-)。谢谢你关于换行符的说法是对的,像blah\nfoo
这样的文件中的一行会被python显示为“blah\\n”,请注意额外的斜杠。谢谢你,我喜欢学习比我讨厌犯错多一点:)