Нежелательные символы новой строки для файла. Писать CSV, когда записи переполнены / слишком длинные - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь записать CSV-файл с питонами file.write, но некоторые записи индекса настолько длинные, что создают новые строки в CSV-файле. Я использую метод .format(), чтобы заполнить свои столбцы соответствующими данными в al oop. В идеале я хотел бы, чтобы CSV принимал длинные записи и просто менял ширину столбца, а не переносил их в новую строку.

with tf.Session(config=sess_config) as sess:
        ...

        fclog = open(os.path.join(log_dir, args.fpred + '.csv'), 'w')   # Initialize csv with col headers
        fclog.write("fname,itp,tp_prob,its,ts_prob\n")

        for i in range(len(fname_batch)):
               fclog.write(
               "{},{},{},{},{}\n".format(fname_batch[i].decode(), picks_batch[i][0][0], picks_batch[i][0][1],
                                                picks_batch[i][1][0], picks_batch[i][1][1]))
        ...
        fclog.close()

![Sample rows of csv output

Изображение выше представляет собой образец строк из полученного CSV-файла. Обратите внимание, что первая строка записей не переполнена и работает должным образом. Однако вторая строка записей содержит переполненную запись в столбце tp_prob и переносит остальные записи на новую строку. Третий ряд записей снова работает должным образом.

Спасибо!

1 Ответ

0 голосов
/ 16 июня 2020

Я обнаружил, что по какой-то причине разрывы строк \n добавлялись внутри фактических строк строки, когда данные были слишком длинными, а не только в конце строки. Чтобы исправить это, я использовал функцию .replace для замены разрывов строк в строке строки, а затем добавил один разрыв строки обратно в конец строки.

with tf.Session(config=sess_config) as sess:
        ...

        fclog = open(os.path.join(log_dir, args.fpred + '.csv'), 'w')   # Initialize csv with col headers
        fclog.write("fname,itp,tp_prob,its,ts_prob\n")

        for i in range(len(fname_batch)):
               my_str = "{},{},{},{},{}".format(fname_batch[i].decode(), picks_batch[i][0][0],
                                                picks_batch[i][0][1],
                                                picks_batch[i][1][0],
                                                picks_batch[i][1][1]).replace("\n", "")
               fclog.write(my_str + "\n")
        ...
        fclog.close()

Я уверен, что есть более чистый способ сделать это, поэтому я приветствую больше решений. Я также до сих пор не понимаю, почему эти разрывы строк вставляются автоматически.

...