使用不等量的空格重新格式化文本文件然后转换为 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
我试图编写一些代码来帮助我重新格式化我的 .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