CSV Writer (Python) с CRLF вместо LF
Привет, я пытаюсь использовать библиотеку для преобразования моего файла CSV в новый.
Код, который я написал, следующий:
import csv
import re
file_read=r'C:\Users\Comarch\Desktop\Test.csv'
file_write=r'C:\Users\Comarch\Desktop\Test_new.csv'
def find_txt_in_parentheses(cell_txt):
pattern = r'\(.+\)'
return set(re.findall(pattern, cell_txt))
with open(file_write, 'w', encoding='utf-8-sig') as file_w:
csv_writer = csv.writer(file_w, lineterminator="\n")
with open(file_read, 'r',encoding='utf-8-sig') as file_r:
csv_reader = csv.reader(file_r)
for row in csv_reader:
cell_txt = row[0]
txt_in_parentheses = find_txt_in_parentheses(cell_txt)
if len(txt_in_parentheses) == 1:
txt_in_parentheses = txt_in_parentheses.pop()
cell_txt_new = cell_txt.replace(' ' + txt_in_parentheses,'')
cell_txt_new = txt_in_parentheses + '\n' + cell_txt_new
row[0] = cell_txt_new
csv_writer.writerow(row)
Проблема только в том, что в итоговом файле ( Test_new.csv ) вместо. Вот пример изображения:
- читать файл слева
- напишите файл справа:
Можно ли написать свой код с использованием
csv
библиотека так что
LF
остается внутри ячейки вместо
CRLF
.
2 ответа
Если
csvfile
является файловым объектом, его следует открывать с помощью 1
[...]Сноски
1(1,2) Если не указано, новые строки, встроенные в поля в кавычках, не будут интерпретироваться правильно, а на платформах, использующих
\r\n
накладки на доп.\r
будет добавлено. Всегда должно быть безопасно указыватьnewline=''
, так как модуль csv выполняет собственную (универсальную) обработку новой строки.
Это именно та проблема, которую вы видите. Так...
with open(file_read, 'r', encoding='utf-8-sig', newline='') as file_r, \
open(file_write, 'w', encoding='utf-8-sig', newline='') as file_w:
csv_reader = csv.reader(file_r, dialect='excel')
csv_writer = csv.writer(file_w, dialect='excel')
# ...
Вы работаете в Windows и открываете файл в режиме «w», который дает вам окончание строк в стиле Windows. Использование режима «wb» должно дать вам предпочтительное поведение.