出于某种原因,我的名为lst的列表总是为空,尽管myfile.txt包含分散在其中的数字。我无法弄清楚为什么。有人可以告诉我吗?谢谢!
import re
lst = ()
fname = "myfile.txt"
try:
with open(fname, 'r') as fh:
for line in fh:
lst = [int(s) for s in re.findall(r'\b\d+\b',line)]
print lst
except IOError:
print "Error reading file!"
答案 0 :(得分:1)
现在你没有在整个文件中累积数字,而是每次都替换列表。如果你打算全部拿到它们,那么这样的事情会更合适:
import re
lst = []
fname = "myfile.txt"
try:
with open(fname, 'r') as fh:
for line in fh:
lst.extend(int(s) for s in re.findall(r'\b\d+\b',line))
print lst
except IOError:
print "Error reading file!"
答案 1 :(得分:1)
所以有几个问题,如果你想抓住每个数字,请不要使用' \ b \ d + \ b'因为这只会抓住不在单词前面或后面的数字。例如:它将获得" 23 street" - > ' 23'但如果你想得到第23街" - > ' 23'你需要使用' \ d + \'。否则其中一个评论是正确的,这是因为你的print lst在for循环之外。我愿意打赌myfile.txt的最后一行不包含任何数字,所以它永远不会打印任何东西。有几种方法可以解决它,我将向您展示两种方式。
import re
lst = ()
fname = "myfile.txt"
try:
with open(fname, 'r') as fh:
for line in fh:
lst = [int(s) for s in re.findall(r'\d+',line)]
print lst
except IOError:
print "Error reading file!"
这是更简单的方法,你可以处理更少的代码,但如果你想在打印时让所有对象都存在于一个数组中,你也可以这样做。
import re
lst = []
fname = "myfile.txt"
try:
with open(fname, 'r') as fh:
for line in fh:
lst.append([int(s) for s in re.findall(r'\b\d+\b',line)])
print lst
except IOError:
print "Error reading file!"
你会在第2行注意到这一点我把它变成了一个列表而不是一个元组。这样我们就可以在列表理解上使用.append,然后将其打印出来。
答案 2 :(得分:0)
with open(fname, 'r') as fh:
data = fh.read()
lst = re.findall(r'\b\d+\b',data)
print lst