<p>由于原始csv不会在带换行符的字段周围加引号,因此文件需要用<code>newline='\r\n'</code>打开,这样只有<code>\r\n</code>被视为换行符,而<code>\n</code>本身不是:</p>
<pre><code>import csv
from itertools import repeat
# assuming lines looks like
# Type, Animal, Age\r\n
# Animals,Dog\nZebra\nPanda\nBear,40\n26\n18\n59\r\n
# specifically set newlines to '\r\n'
with open('file.csv', 'r', newline='\r\n') as fin:
with open('new_file.csv', 'w', newline='') as fout:
writer = csv.writer(fout)
for line in fin:
# manually split row
row = line.rstrip().split(',')
for newrow in zip(repeat(row[0]), row[1].split('\n'), row[2].split('\n')):
writer.writerow(newrow)
</code></pre>
<p>如果您的原始csv被正确引用,您的代码将如下所示:</p>
<pre><code>import csv
from itertools import repeat
# assuming lines looks like
# Type, Animal, Age
# Animals,"Dog\nZebra\nPanda\nBear","40\n26\n18\n59"\r\n
with open('file.csv', 'r', newline='') as fin:
with open('new_file.csv', 'w', newline='') as fout:
reader = csv.reader(fin, delimiter=',')
writer = csv.writer(fout, delimiter=',')
for row in reader:
for newrow in zip(repeat(row[0]),
row[1].split('\n'),
row[2].split('\n')):
writer.writerow(newrow)
</code></pre>