csv.writerows()在每行之后放置换行符

ZZM*_*ike 6 python csv python-3.x

这是O'Reilly Cookbook(截断数据集)的一个例子

headers = ['Symbol','Price','Date','Time','Change','Volume']
rows = [{'Symbol': 'AA', 'Volume': 181800, 'Change': -0.18,
         'Time': '9:36am', 'Date': '6/11/2007', 'Price': 39.48},
        {'Symbol': 'AIG', 'Volume': 195500, 'Change': -0.15,
         'Time': '9:36am', 'Date': '6/11/2007', 'Price': 71.38} ]

with open('stocks2.csv','w') as f:
    f_csv = csv.DictWriter(f, headers)
    f_csv.writeheader()
    f_csv.writerows(rows)
Run Code Online (Sandbox Code Playgroud)

输出文件\n在每行的末尾都有一个,显然在结尾处还有一个.当我将它带入Excel时,每行之间会出现空白行.如果我用Notepad ++打开它也一样.

但是,如果我more从命令行,\n不显示.

\n在文件的末尾看到了关于a的另一个问答- 但这个问题\n在每一行的末尾都是关于a 的.(我不明白为什么more不给\n.)

我计划将文件带入OpenOffice Calc.

pao*_*lov 10

仅在Windows上使用Python时会出现此问题.

在Python v3中,您需要在open call中添加newline ='':

Python 3.3 CSV.Writer写入额外的空白行

在Python v2上,您需要在传递给csv之前在open()调用中以"b"打开文件为二进制文件

换线

with open('stocks2.csv','w') as f:
Run Code Online (Sandbox Code Playgroud)

至:

with open('stocks2.csv','wb') as f:
Run Code Online (Sandbox Code Playgroud)

将解决问题

有关此问题的更多信息:

Python中的CSV添加额外的回车

  • 这在Python 3中是不正确的,这是OP如何标记问题的方式。 (2认同)

Cod*_*ins 7

这是一个额外的回车符,这是 Windows 特定的问题,与 Python 2/3 差异无关。如果您在 Notepad++ 中打开文件并启用Show all characters,您将看到以下内容:

\n\n
Symbol,Price,Date,Time,Change,Volume[CR]\n[CR][LF]\nAA,39.48,6/11/2007,9:36am,-0.18,181800[CR]\n[CR][LF]\nAIG,71.38,6/11/2007,9:36am,-0.15,195500[CR]\n[CR][LF]\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是因为 Windows 上的 Python 正在将行结尾从 转换\'\\n\'\'\\r\\n\',而该writerows()函数已经添加\'\\r\\n\'到每行的末尾。发生了什么:

\n\n
    \n
  1. csv.writerows() 写入适当的数据行,然后以\'\\r\\n\'
  2. \n
  3. Python 的内部处理(因为你在 Windows 上)看到行尾 \' \\n\' 并认为需要将其更改为\'\\r\\n\'. 所以你得到了\'\\r\\r\\n\'.
  4. \n
\n\n

您没有看到打印到控制台有问题的原因是它没有将额外的内容检测\'\\r\'为新行,而 Excel 和 Notepad++ 则将其检测为新行。

\n\n

对于 Python 3,您应该使用newline=\'\'此处记录的选项: https: //docs.python.org/3/library/csv.html

\n\n
\n

csv.writer(csvfile, dialect=\'excel\', **fmtparams)

\n\n

返回一个编写器对象,负责将 user\xe2\x80\x99s 数据转换为给定类文件对象上的分隔字符串。csvfile 可以是任何具有 write() 方法的对象。如果 csvfile 是文件对象,则应使用 newline=\'\' [1] 打开它。

\n
\n


Om *_*ash 6

我在适用于Python 3的Windows上遇到了此问题。我尝试在打开文件时更改换行参数,并与配合使用newline=''

添加newline=''open()方法,如下所示:

with open('stocks2.csv','w', newline='') as f:
    f_csv = csv.DictWriter(f, headers)
    f_csv.writeheader()
    f_csv.writerows(rows)
Run Code Online (Sandbox Code Playgroud)

它将作为魅力。

希望能帮助到你。