Python - 解析难题

时间:2012-07-22 18:45:04

标签: python parsing csv

我已经搜索过高低分辨率来解决这种情况,并测试了几种不同的方法,但到目前为止我还没有运气。基本上,我有一个文件,其中包含以下格式的数据,我需要将其转换为CSV:

(previously known as CyberWay Pte Ltd)
0 2019
01.com
0 1975
1 TRAVEL.COM
0 228
1&1 Internet
97 606
1&1 Internet AG
0 1347
1-800-HOSTING
0 8
1Velocity
0 28
1st Class Internet Solutions
0 375
2iC Systems
0 192

我尝试过使用re.sub并用逗号替换每行其他数字之间的空格,但到目前为止还没有取得任何成功。我承认我通常从 CSV解析,所以原始文本对我来说是一个挑战。我需要维护每个相应数字集上方的字符串格式。

我希望将CSV格式化为:

foo bar
0,8
foo bar
0,9
foo bar
0,10
foo bar
0,11

大约有50,000个条目,因此手动编辑这将需要花费大量时间。

如果有人有任何建议,我将非常感激。

非常感谢。

2 个答案:

答案 0 :(得分:2)

如果您只想用逗号替换空格,您可以这样做:

line = ','.join(line.split())

你必须只在其他所有行上执行此操作,但从您的问题来看,听起来您已经知道如何使用其他所有行。

答案 1 :(得分:0)

如果我正确理解了您的要求,则需要在所有行上使用strip(),并在偶数行(从1开始的行)上基于空格分割:

import re

fp = open("csv.txt", "r")
while True:
    line = fp.readline()
    if '' == line:
            break
    line    = line.strip()
    fields  = re.split("\s+", fp.readline().strip())
    print "\"%s\",%s,%s" % ( line, fields[0], fields[1] )
fp.close()

输出为CSV(如果输入中出现引号,则可能需要转义引号):

"Content of odd line",Number1,Number2

我不明白'foo,bar'你把它作为标题放在你的例子的奇数行上。