<p>您正在以逗号分隔的值读取文件。所以,看这一行:</p>
<pre><code>green, nine, square, bbb sdf@123.com,wef@123.com,hft@123.com
</code></pre>
<p>用逗号分隔的值为:</p>
<pre><code>green
nine
square
bbb sdf@123.com
wef@123.com
hft@123.com
</code></pre>
<p>所以,第4列是<code>wef@123.com</code>。当你尝试在逗号上拆分它时,它当然没有任何结果,所以你只得到一个结果,然后你要求第二个和第三个不存在的值。你知道吗</p>
<hr/>
<p>你需要修正你的CSV文件实际上是一个CSV文件。你知道吗</p>
<p>这包括在<code>bbb</code>列之后和头中的每一列之后加一个逗号。你知道吗</p>
<p>更重要的是,这意味着在使用相同的逗号分隔列时,不要在列中使用逗号。结果充其量是不明确的,因此无法解析。你知道吗</p>
<p>解决方法包括:</p>
<ul>
<li>在字符串中引用逗号。你知道吗</li>
<li>避开逗号。你知道吗</li>
<li>在列中使用不同的分隔符。你知道吗</li>
<li>在列之间使用不同的分隔符。你知道吗</li>
</ul>
<p>(您可以<em>几乎</em>在这里使用<code>", "</code>作为列分隔符,但这真的很麻烦,任何人编辑您的文件都会破坏它。)</p>
<hr/>
<p>下面是一个可行的例子:</p>
<pre><code> col0, col1, col2, col3, col4
blue, eight, line, aaa, abc@123.com,xyz@123.com,ghi@123.com
green, nine, square, bbb, sdf@123.com,wef@123.com,hft@123.com
</code></pre>
<p>即使有这么多杂乱的间距(您总是从人工编辑的文件中获得),也可以用正确的<a href="https://docs.python.org/3/library/csv.html#csv-fmt-params" rel="nofollow noreferrer">dialect parameters</a>清晰地解析:</p>
<pre><code>csv_reader = csv.DictReader(csv_file, skipinitialspace=True)
</code></pre>
<p>现在,每一行看起来像这样:</p>
<pre><code>{'col0': 'blue',
'col1': 'eight',
'col2': 'line',
'col3': 'aaa',
'col4': 'abc@123.com,xyz@123.com,ghi@123.com'}
</code></pre>
<p>…现在,你可以<code>row["col4"].split(",")</code>回来了:</p>
<pre><code>['abc@123.com', 'xyz@123.com', 'ghi@123.com']
</code></pre>
<p>然后,<code>[1]</code>和<code>[2]</code>将工作。你知道吗</p>
<hr/>
<p>但是,代码中至少还有一个问题。您想要的输出包括第2列和第3列,但是您要显式地将它们排除在<code>writerow</code>之外。你知道吗</p>
<p>当我们在做的时候,没有理由试图把7行代码塞进一个表达式中。那么,为什么不只<code>split</code>一次呢?你知道吗</p>
<pre><code>col456 = row["col4"].split(",")
</code></pre>
<p>然后,我们可以修改<code>row</code>:</p>
<pre><code>row["col4"], row["col5"], row["col6"] = col456
</code></pre>
<p>…现在:</p>
<pre><code>csv_writer.writerow(row)
</code></pre>