Поскольку ваш исходный файл csv не помещает кавычки вокруг полей с символами новой строки, файл необходимо открыть с помощью newline='\r\n'
, чтобы только \r\n
обрабатывалось как символ новой строки, а \n
само по себе не было:
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)
Если ваш оригинальный CSV был правильно указан, ваш код будет выглядеть так:
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)