我试图写一个程序来寻找表格的行
New Revision: 39772
提取所有数字,然后找到平均值。这是我的代码:
import re
import statistics
file_name = raw_input("Enter file: ")
file = open(file_name)
revision_nums = []
for line in file:
line = line.rstrip()
x = re.findall("New Revision: (\d+)", line)
if len(x) > 0:
revision_nums.append(x)
print statistics.mean(revision_nums)
但是,我意识到revision_nums中的所有元素都存储为列表,当我尝试运行它时,我收到此错误:
TypeError: can't convert type 'list' to numerator/denominator
我试过了:
for i in revision_nums:
for j in i:
j = float(j)
并返回相同的错误。我做错了什么,如何解决这个问题?
答案 0 :(得分:3)
x
是list
,即使re.findall
只找到一个匹配项。试试revision_nums.append(x[0])
答案 1 :(得分:1)
如果你的行始终以http://example.org/graph
开头,你不需要正则表达式,你可以使用str.startswith和str.rsplit:
New Revision:
哪个可以成为列表comp:
file_name = raw_input("Enter file: ")
with open(file_name) as f:
revision_nums = []
for line in f:
if line.startswith("New Revision:"):
revision_nums.append(float(line.rsplit(None,1)[1]))
使用with open(file_name) as f:
revision_nums = [float(line.rsplit(None,1)[1])for line in f
if line.startswith("New Revision:")]
会自动关闭您的文件。
如果你必须使用re并且在行使用搜索和with
中可能有许多匹配,则映射到float:
extend