解析前python csv模块剥离线

时间:2013-01-15 18:33:59

标签: python csv python-2.7

我有一个纯文本文件:

    2 jordyt
    2 dawder
    2 LOL12345
    2 2251084185
    2 123456789
    2 123456
    1 warcraft
    1 tripp88

通过python's csv模块解析后,我有:

with open(filename,'r') as csvfile:
    reader = csv.reader(csvfile,delimiter=' ')
    for row in reader:
        print row

['', '', '', '', '', '', '2', 'jordyt']
['', '', '', '', '', '', '2', 'dawder']
['', '', '', '', '', '', '2', 'LOL12345']
['', '', '', '', '', '', '2', '2251084185']
['', '', '', '', '', '', '2', '123456789']
['', '', '', '', '', '', '2', '123456']
['', '', '', '', '', '', '1', 'warcraft']
['', '', '', '', '', '', '1', 'tripp88']

编辑1:

我希望输出像这样:

['2', 'jordyt']
['2', 'dawder']
['2', 'LOL12345']
.
.
.

我可以使用自定义预处理器解决此问题。但是,这些文件太大了,两次阅读都不好。

我的问题是:如何在解析之前告诉csv模块剥离线?

3 个答案:

答案 0 :(得分:5)

一种选择是提供skipinitialspace参数:

with open(filename,'r') as csvfile:
    reader = csv.reader(csvfile,delimiter=' ',skipinitialspace=True)
    for row in reader:
        print row

答案 1 :(得分:4)

如果您的分隔符是空格,那么我很想不使用CSV模块(如果您知道没有带空格的带引号的字段):

这利用了split()split(None)很好地处理连续分隔符的性质。

with open(filename,'r') as csvfile:
    for row in csvfile:
        print row.split()

或者,如果您需要处理它并使用CSV模块,只需在输入文件上创建一个生成器并将其传递给阅读器):

with open(filename,'r') as csvfile:
    stripped = (row.strip() for row in csvfile)
    reader = csv.reader(stripped,delimiter=' ')
    for row in reader:
        print row

答案 2 :(得分:1)

我怀疑你在这种情况下使用csv,因为split()会做你想要的。

with open(filename, 'r') as csvfile:
    for row in csvfile:
        words = row.split()
        print words

打印(适用于您的数据):

['2', 'jordyt']
['2', 'dawder']
['2', 'LOL12345']
['2', '2251084185']
['2', '123456789']
['2', '123456']
['1', 'warcraft']
['1', 'tripp88']