我有一个纯文本文件:
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模块剥离线?
答案 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']