0

我有一个纯文本文件:

    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 模块在解析之前去掉这些行?

4

3 回答 3

5

一种选择是提供skipinitialspace参数:

with open(filename,'r') as csvfile:
    reader = csv.reader(csvfile,delimiter=' ',skipinitialspace=True)
    for row in reader:
        print row
于 2013-01-15T18:42:44.670 回答
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
于 2013-01-15T18:38:16.087 回答
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']
于 2013-01-15T18:47:33.683 回答