Более эффективный способ переформатировать текстовый файл с неравным количеством пробелов, а затем преобразовать в CSV - PullRequest
1 голос
/ 24 сентября 2019

Я попытался написать некоторый код, который помог бы мне переформатировать мой файл .txt, чтобы я мог преобразовать его в .csv.Тем не менее, в .txt имеется непоследовательное количество пробелов, и я попытался найти способ, который помог бы заменить пробелы запятой.

Я пробовал несколько способов замены, но не придумалзаключение еще.Я также попытался найти строковые литералы, которые разделяли бы столбцы, но не нашел таких, как \ t.Меня не беспокоит первый ряд (имена столбцов), потому что я все равно переименую их.Текстовый файл выглядит примерно так:

 num1  num2   num3
 2323  33232  323232
 434    4556    3432
 43434 34343  434343
    for line in in_file:
        line1 = line.strip(' ')
        line2 = line1.replace('    ', ',')
        line3 = line2.replace('   ', ',')
        line4 = line3.replace('  ', ',')
        line5 = line4.replace(' ', ',')
        out_file.writelines(line5)

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

1 Ответ

0 голосов
/ 24 сентября 2019

Для этого можно использовать метод строк split .

str.split создает список «слов» в вашей строке без пробелов

>>> s = 'This is   a  long   string 1234  '
>>> s.split()
['This', 'is', 'a', 'long', 'string', '1234']

Если у вас есть такой список, вы можете использовать метод строк join , чтобы создать одну строку через запятую:

>>> ','.join(s.split())
'This,is,a,long,string,1234'

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

>>> import csv
>>> with open('myfile.txt') as f, open('out.csv', 'w', newline='') as o:
...     writer = csv.writer(o)
...     for line in f:
...         writer.writerow(line.split())
... 
16  
19
15
20
>>> 
$  cat out.csv 
num1,num2,num3
2323,33232,323232
434,4556,3432
43434,34343,434343
...