Различный уровень интервала между строками в разных строках при преобразовании CSV-файла в txt-файл с использованием python

#python #python-3.x #python-2.7

#python #python-3.x #python-2.7

Вопрос:

Мне нужно преобразовать файл .csv в файл .txt, что я и сделал, и у меня есть следующий код.

 text_list = []

csv_file = 'test.csv'
with open(csv_file,"r") as infile:
    for line in infile:
        line = line.split(",", 2)
        text_list.append("t".join(line))

txt_file = 'test.txt'
with open(txt_file, 'w') as outfile:
    for line in text_list:
        outfile.write(" "   line)
    outfile.close
 

Но проблема в том,,

CSV-файл:

 phi,Z,T
0,0,0
10.000005,1.2,3000.00
20.000005,2.4,6000.00
 

Требуется текстовый файл:

 phi        Z    T
0          0    0
10.000005  1.2  3000.00
20.000005  2.4  6000.00
 

Текстовый файл, который у меня есть с вышеупомянутым кодом:

 phi    Z    T
0    0    0
10.000005    1.2    3000.00
20.000005    2.4    6000.00
 

Спасибо

Ответ №1:

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

Затем мы вычисляем количество столбцов num_cols из длины первой строки. Затем мы вычисляем длину самого длинного слова / числа в каждом столбце с пониманием вложенного списка. Мы используем это для ljust каждого слова в соответствии с максимальной длиной соответствующего столбца.

 text_list = []

csv_file = 'test.csv'
with open(csv_file,"r") as infile:
    for line in infile:
        line = line.rstrip().split(",", 2)
        text_list.append(line)

num_cols = len(text_list[0])
max_lengths = [max([len(line[i]) for line in text_list]) for i in range(num_cols)]

txt_file = 'test.txt'
with open(txt_file, 'w') as outfile:
    for line in text_list:
        outfile.write('t'.join([word.ljust(max_lengths[i]) for i, word in enumerate(line)])   'n')
 

Комментарии:

1. Я понимаю вашу идею здесь. Но AttributeError: '_io.TextIOWrapper' object has no attribute 'split' в строке написано: for line in infile.split('n') @sunnytown

2. Мой плохой, я отредактировал код, теперь он должен работать. Дай мне знать.