用python解析文本

用python解析文本,python,parsing,Python,Parsing,我有一个这样结构的文本文件 1\t 13249\n 2\t 3249\n 3\t 43254\n etc... 这是一个非常简单的列表。我把文件打开了,我能读出来。我有以下代码: count = 0 for x in open(filename): count += 1 return count 我想做的是将每行的第一个数字分配给一个变量(比如说xi),并将每行的第二个数字分配给另一个变量(yi)。目标是能够对这些数字进行一些统计 非常

我有一个这样结构的文本文件

1\t        13249\n

2\t        3249\n

3\t        43254\n

etc...
这是一个非常简单的列表。我把文件打开了,我能读出来。我有以下代码:

count = 0
for x in open(filename):
    count += 1
return count
我想做的是将每行的第一个数字分配给一个变量(比如说
xi
),并将每行的第二个数字分配给另一个变量(
yi
)。目标是能够对这些数字进行一些统计


非常感谢。

无需重新发明轮子

count = 0
for x in open(filename):
   # strip removes all whitespace on the right (so the newline in this case)
   # split will break a string in two based on the passed parameter
   xi, yi = x.rstrip().split("\t") # multiple values can be assigned at once
   count += 1
return count
import numpy as np

for xi, yi in np.loadtxt('blah.txt'):
    print(xi)
    print(yi)

使用正则表达式:

import re
def FUNC(path):
xi=[]
yi=[]
f=open(path).read().split("\n") # spliting file's content into a list
patt=re.compile("^\s*(\d)\t\s(\d).*") # first some whitespaces then first number
#then a tab or space second number and other characters 
for iter in f:
    try:
        t=patt.findall(iter)[0]
        xi.append(t[0])
        yi.append(t[1])
    except:
        pass
print xi,yi
#-----------------------------

if __name__=="__main__":
FUNC("C:\\data.txt")
更简单的代码:

def FUNC(path):
x=[]
y=[]
f=open(path).read().split("\n")
for i in f:
    i=i.split(" ")
    try:
        x.append(i[0][0])
        y.append(i[1][0])
    except:pass
print x,y
请注意,int('23\n')=23

这更清楚: 请注意,enumerate为您提供了一个包含计数器的生成器

>>> with open('blah.txt') as f:
...     for count,p in enumerate(f):
...             xi,yi=map(int,p.split()) #you could prefer (int(i) for i in p.split())
...             print count,xi,yi
... 
0 1 13249
1 2 3249
2 3 43254

当OP表示要对数字进行一些统计时,这会将
xi,yi
作为字符串。我认为这太复杂了。先看看numpy软件包。这取决于numpy,它不是内置的。我确实使用米老鼠以外的东西的统计数据,但仍然感觉不到需要numpy。。。(部分原因是他们支持python 3的时间太长了)。请注意,当我向OP指出您的解决方案依赖于一个必须手动下载和安装的外部软件包时,没有必要过于激进。当您不习惯python时,这些软件包不会在您眼前爆炸。好的,但是在这个问题中,你是不是在提倡不要使用一个使工作更容易的库,而同样的事情可以通过内置的方式来完成?我想说的是,python最棒的地方之一是它有许多成熟而强大的库,如
numpy
,并且易于使用。
>>> with open('blah.txt') as f:
...     for count,p in enumerate(f):
...             xi,yi=map(int,p.split()) #you could prefer (int(i) for i in p.split())
...             print count,xi,yi
... 
0 1 13249
1 2 3249
2 3 43254