Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python csv模块如何理解行尾与换行_Python_Csv_File Io_Newline - Fatal编程技术网

python 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'] ['

这更多的是要求解释csv模块如何真正理解来自文件的数据。我不太明白有一个怪癖,我曾经遇到过几次,特别是与新行字符有关的怪癖

使用以下代码:

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”,请注意额外的斜杠。谢谢你,我喜欢学习比我讨厌犯错多一点:)