擅长:python、mysql、java
<p><code>csv.reader()</code>可以处理任何<em>iterable</em>,并期望该iterable上的每次迭代都生成一个<em>完整的行</em>。iterable可以是一个类似文件的对象,或者(通常)一个字符串列表:</p>
<pre><code>header_c = csv.reader([header], delimiter=',', quotechar='"')
</code></pre>
<p>如果只传入一个字符串对象,则字符串本身将被迭代,就像每个字符都是一行一样,但是由于引号,<code>csv</code>将继续读取'lines',直到找到右引号字符。在</p>
<p>下一个'line'包含一个逗号,<em>两个</em>空值。在</p>
<p>或者,以前5个字符(<code>"Id",</code>)为例,<code>csv</code>执行以下操作:</p>
<ul>
<li>迭代并接收<code>"</code>。这是一个带引号的值,所以包括行尾的所有内容。在</li>
<li>有一个左引号,迭代直到找到一个右引号,直到该点被附加到现有值。
<ul>
<li>循环并接收<code>I</code>,追加。在</li>
<li>循环并接收<code>d</code>,追加。在</li>
<li>循环并接收<code>"</code>。引号结束,生成一个完整的行<code>['Id']</code>。在</li>
</ul></li>
<li>迭代并接收<code>,</code>。这是一个带有分隔符的完整行,因此要生成<code>['', '']</code>。在</li>
</ul>
<p>每当我需要将字符串值传递给<code>csv.reader()</code>时,我使用<a href="http://docs.python.org/2/library/stdtypes.html#str.splitlines" rel="nofollow">^{<cd13>}</a>;此方法将始终返回一个列表,因此这也适用于没有换行符的行:</p>
^{pr2}$
<p>我在换行符中保留(传入<code>True</code>到{<cd13>};带新行的引号将正确返回,并包含新行。在</p>