将空格分隔文件转换为CSV

5 投票
4 回答
19436 浏览
提问于 2025-04-17 10:13

我有一个文本文件,里面是表格数据。我想要做的是自动化地把这些数据写入一个新的文本文件,这个新文件用逗号分隔,而不是用空格分隔。我还需要从现有的数据中提取几个列,并且重新排列这些列。

这是原始数据的前四行:

Number of rows: 8542
 Algorithm  |Date   |Time   |Longitude  |Latitude   |Country    
 1  2000-01-03  215926.688  -0.262  35.813  Algeria 
 1  2000-01-03  215926.828  -0.284  35.817  Algeria

我想要的最终结果是这样的:

Longitude,Latitude,Country,Date,Time
-0.262,35.813,Algeria,2000-01-03,215926.688

有没有什么建议可以帮助我开始这个任务?

4 个回答

0

str.split() 如果不带任何参数,会把字符串按照任意长度的空白字符(比如空格、制表符等)进行切分。operator.itemgetter() 可以接收多个参数,并且会返回一个元组。

4

你可以使用 csv 模块,配合一个用空格作为分隔符的读取器来读取你的数据,然后用同一个模块里的写入器(用逗号作为分隔符)来生成输出。

实际上,csv 模块的文档中,第一个例子就使用了 delimiter=' '

你可以使用 DictReaderDictWriter,并在它们的构造函数中指定列的顺序(fieldnames 列表:如果你想重新排序,读取和写入时可以不同),这样就能按照你想要的顺序输出条目。

(在生成输出时,你可能需要跳过前两行。)

编辑:

这里有一个处理多词国家名称的例子:

import cStringIO
import csv

f = cStringIO.StringIO("""A B C
1 2 Costa Rica
3 4 Democratic Republic of the Congo
""")

r = csv.DictReader(f, delimiter=' ', restkey='rest')
for row in r:
    if row.get('rest'):
        row['C'] += " %s" % (" ".join(row['rest']))
    print 'A: %s, B: %s, C: %s' % (row['A'], row['B'], row['C'])

使用 restkey=,并将该值的字典条目连接起来,这个值是一个剩余项的列表(这里 restkey='rest')。这将打印:

A: 1, B: 2, C: Costa Rica
A: 3, B: 4, C: Democratic Republic of the Congo
7

我想这个文件是用制表符(tab)分开的,而不是用空格。

如果是这样的话,你可以试试下面的代码:

input_file = open('some_tab_separated_file.txt', 'r')
output_file = open('some_tab_separated_file.csv', 'w')
input_file.readline() # skip first line 
for line in input_file:
    (a, date, time, lon, lat, country) = line.strip().split('\t')
    output_file.write(','.join([lon, lat, country, date, time]) + '\n')
input_file.close()
output_file.close()

这段代码没有经过测试,里面可能有错误,留给你自己去练习解决。

撰写回答