这是来自 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)
输出文件在每一行的末尾都有一个\n
,显然在结尾处还有一个more
。当我将它带入Excel时,每行之间会出现空白行。如果我用Notepad ++打开它,也一样。
但是,如果我\n
来自命令行,则\n
不会显示。
我在文件末尾看到了另一个关于\n
的问答 - 但是这一行在每行末尾大约是more
。 (而且我不明白为什么\n
没有给#!/bin/bash
name=`basename $1`
case $2 in
start)
echo $$ > /var/run/service.pid;
exec 2>&1 $1 1>/var/log/$name.stdout
;;
stop)
kill `cat /var/run/service.pid` ;;
*)
echo "usage: <path to app> {start|stop}" ;;
esac
。)
我计划将文件带入OpenOffice Calc。
答案 0 :(得分:7)
仅在Windows上使用Python时才会出现此问题。
在Python v3中,您需要在打开调用中添加newline ='':
Python 3.3 CSV.Writer writes extra blank rows
在Python v2上,你需要在open()调用中打开带有“b”的二进制文件,然后再转到csv
更改行
with open('stocks2.csv','w') as f:
为:
with open('stocks2.csv','wb') as f:
将解决问题
有关此问题的更多信息:
答案 1 :(得分:2)
这是一个额外的回车,这是一个与Python 2/3差异无关的特定于Windows的问题。如果您在Notepad ++中打开文件并启用Show all characters
,则会看到以下内容:
Symbol,Price,Date,Time,Change,Volume[CR]
[CR][LF]
AA,39.48,6/11/2007,9:36am,-0.18,181800[CR]
[CR][LF]
AIG,71.38,6/11/2007,9:36am,-0.15,195500[CR]
[CR][LF]
这是因为Windows上的Python正在将您的行结尾从'\n'
转换为'\r\n'
,而writerows()
函数已经将'\r\n'
添加到每行的末尾。发生了什么:
'\r\n'
结束行\n
&#39;并认为需要将其更改为'\r\n'
。所以你得到'\r\r\n'
。您没有看到打印到控制台的原因是因为它没有检测到额外的'\r'
作为新行,而Excel和Notepad ++就是这样。
对于Python 3,您应该使用此处记录的newline=''
选项:https://docs.python.org/3/library/csv.html。
csv.writer(csvfile,dialect =&#39; excel&#39;,** fmtparams)
返回一个编写器对象,负责将用户的数据转换为给定的类文件对象上的分隔字符串。 csvfile可以是具有write()方法的任何对象。 如果csvfile是文件对象,则应使用newline =&#39;&#39;打开它。 [1]。
答案 2 :(得分:1)
我遇到了同样的问题,Om Prakash 的修复几乎对我有用,但是我在 for 循环而不是列表中编写了一系列字符串,对我来说它只是作为附加而不是 w 来解决的,并且\n 而不是 '':
with open('stocks2.csv','a', newline='\n') as f:
f_csv = csv.DictWriter(f, headers)
f_csv.writeheader()
f_csv.writerows(rows)