Запись текста в конец файла, а не с новой строки
у меня имеется файл csv с примерно такими данными
;;;;;;57.67253850584151 63.065711945171756;"текст без переноса"
;;;;;;57.673070813642 63.067541643977;"текст
с переносом"
;;;;;;57.672613624414 63.068331554533;"текст
с переносом"
;;;;;;57.672155353661 63.070643618703;"текст без переноса"
мне надо чтобы строки начинающиеся с ";" записывали в новую строчку, а все что начинается не с ; дописывало в конец последней строки. Чтобы в итоге получилось вот так
;;;;;;57.67253850584151 63.065711945171756;"текст без переноса"
;;;;;;57.673070813642 63.067541643977;"текст с переносом"
;;;;;;57.672613624414 63.068331554533;"текст с переносом"
;;;;;;57.672155353661 63.070643618703;"текст без переноса"
Вряд ли мои наброски помогут, но вот мой код
with open(r"test.csv", "r") as source, open('output.txt', 'a') as destination:
for line in source:
if line.startswith(';'):
destination.write(line)
else:
destination.write(line)
Буду благодарен любой помощи!
Ответы (2 шт):
Автор решения: ioprst
→ Ссылка
Если не хотите читать весь файл сразу, то можно так
not_first_line = False
with open(r"test.csv", "r") as source, open('output.txt', 'w') as destination:
for line in source:
if line.endswith('\n'):
line = line[:-1]
if not_first_line:
if line.startswith(';'):
destination.write('\n')
else:
not_first_line = True
destination.write(line)
Флаг нужен для того, чтобы не добавлять перенос перед первой строкой.
Автор решения: Danzo Sama
→ Ссылка
Вот еще мое решение со стандартной библиотекой csv.
inport csv
with open('test.csv', newline='') as csvfile, open('output.txt', 'a') as destination:
spamreader = csv.reader(csvfile, delimiter=';', quotechar='\"')
test = tuple(spamreader)
for row in test:
destination.writelines(r.replace('\n', ' ') for r in row)
destination.write('\n')