<p>这是一个额外的回车,这是一个Windows特有的问题,与Python 2/3的差异无关。如果在Notepad++中打开文件并启用<code>Show all characters</code>,您将看到以下内容:</p>
<pre><code>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]
</code></pre>
<p>这是因为Windows上的Python正在将以<code>'\n'</code>结尾的行转换为<code>'\r\n'</code>,而<code>writerows()</code>函数已经将<code>'\r\n'</code>添加到每行的末尾。发生了什么事:</p>
<ol>
<li>csv.writerows()写入适当的数据行,然后以<code>'\r\n'</code>结束该行</li>
<li>Python的内部处理(因为您在Windows上)看到了行尾“<code>\n</code>”,并认为需要将其更改为<code>'\r\n'</code>。所以你得到了<code>'\r\r\n'</code>。</li>
</ol>
<p>您看不到打印到控制台有问题的原因是,它没有将多余的<code>'\r'</code>作为一个新行进行检测,而Excel和Notepad++就是这样。</p>
<p>对于Python 3,您应该使用<code>newline=''</code>选项,如本文所述:<a href="https://docs.python.org/3/library/csv.html" rel="nofollow">https://docs.python.org/3/library/csv.html</a>。</p>
<blockquote>
<p>csv.writer(csvfile, dialect='excel', **fmtparams)</p>
<p>Return a writer object responsible for converting the user’s data into delimited strings on the given file-like object. csvfile can be any object with a write() method. <strong>If csvfile is a file object, it should be opened with newline='' [1].</strong> </p>
</blockquote>