【问题标题】:Python Code to read File and Extract data用于读取文件和提取数据的 Python 代码
【发布时间】:2016-01-03 03:14:41
【问题描述】:

我正在处理一个小代码分配,并偶然发现了一些我不明白的东西。所以我希望有人可以帮助我并给我一个解释。

所以我正在编写一个代码来编写一个提示输入文件名的程序。该文件可以在这里找到: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 而不是一个实际的数字。

【问题讨论】:

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


    【解决方案1】:

    摆脱这个额外的循环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。

    【讨论】:

    • 为什么不使用 with 语句。它也会清理文件资源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 2014-10-31
    相关资源
    最近更新 更多