更有效的方法是使用不相等的空白重新格式化文本文件,然后转换为cs

2024-09-24 08:35:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: 文件代码intxt数量linereplacefile
1条回答
网友
1楼 · 发布于 2024-09-24 08:35:49

您可以使用字符串的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

相关问题 更多 >