用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