用于读取文件和提取数据的Python代码

时间:2016-01-03 03:14:42

标签: python list python-2.7 for-loop io

我正在进行一项小型代码分配,并偶然发现了一些我不理解的内容。所以我希望有人可以帮助我并给我一个解释。

所以我正在编写一个代码来编写一个提示输入文件名的程序。该文件可在此处找到:http://www.pythonlearn.com/code/mbox-short.txt。使用该文件,我仔细阅读并查找表单行:

X-DSPAM-Confidence:    0.8475. 

我的工作是计算这些线并从每条线中提取浮点值并计算这些值的平均值。

到目前为止,我有以下代码:

#fname = File Path
fh = open(fname)
emptyl=[]
for line in fh:

    if not line.startswith("X-DSPAM-Confidence:"): continue
    line=line.strip()
    print line

    for confidence in line:
        try:
            x = float(line[-6:])
            print x
            y = emptyl.append(x)
            print y
        except:
            pass

当我打印Line时,我得到27行X-DSPAM-Confidence:"。但是,当我打印x以查看我的代码的结果时,我得到的每个数字都显示在打印行中重复26次。为什么数字重复?另外,当我打印y时,我得到None。我也不明白为什么它给我None而不是实际数字。

1 个答案:

答案 0 :(得分:0)

摆脱这个额外的循环for confidence in line:

emptyl=[]
with open(fname) as fh:
    for line in fh:
        if not line.startswith("X-DSPAM-Confidence:"): 
            continue
        line = line.strip()
        try:
            x = float(line[-6:])
            emptyl.append(x)
        except Value Error:
            pass

您有两个嵌套循环。首先,你遍历所有行:

for line in fh:

并为每一行循环遍历此行中的所有字符:

  for confidence in line:

并一次又一次地附加此号码:float(line[-6:])

append()是一种修改它所属对象的方法。所以:

emptyl.append(x)

修改emptyl。此操作的返回值为None。通常情况下,它不会被使用,因为我们所做的操作正在修改emptyl