使用不等量的空格重新格式化文本文件然后转换为 csv 的更有效方法

More efficient way to reformat text file with unequal amounts of whitespaces and then convert to csv

我试图编写一些代码来帮助我重新格式化我的 .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)

它打印正确,但效率不高,因为它只替换了一定数量的空格,如果我得到一个包含更多空格的文件,我必须手动添加代码。

你可以使用字符串的split方法来做到这一点。

str.split 生成字符串中 "words" 的列表,没有空格

>>> 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