将空格分隔文件转换为CSV
我有一个文本文件,里面是表格数据。我想要做的是自动化地把这些数据写入一个新的文本文件,这个新文件用逗号分隔,而不是用空格分隔。我还需要从现有的数据中提取几个列,并且重新排列这些列。
这是原始数据的前四行:
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=' '
。
你可以使用 DictReader
和 DictWriter
,并在它们的构造函数中指定列的顺序(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()
这段代码没有经过测试,里面可能有错误,留给你自己去练习解决。