Python 3 - 读取文件,计数和过滤文本

时间:2016-09-29 01:35:33

标签: python-3.x

我正在使用以下提示在Python 3中编写代码:

练习2:编写程序以提示输入文件名,然后读取文件并查找表单行:X-DSPAM-Confidence:0.8475。当您遇到以X-DSPAM-Confidence:开头的行时拉开该行以提取该行上的浮点数。计算这些行,然后计算这些行中的垃圾邮件置信度值的总和。当您到达文件末尾时,打印出平均垃圾邮件可信度。

我已经开始编写我的代码(如下所示),但继续从Python获取以下错误消息:

Traceback (most recent call last):
  File "spam_lines_in_file.py", line 14, in <module>
    for line in fhand:
NameError: name 'fhand' is not defined
0587388179:ch_07_files juliecruz$ 

我很困惑,因为我已经定义了变量&#39; fhand&#39;。专家的任何帮助?

count = 0
sum = 0
user = input('Please enter a file name')
try: 
    fhand = open(user)
except:
    print("Not a valid file")
for line in fhand:
    line = line.rstrip()
    if line.startswith('X-DSPAM-Confidence:'):
         print(lines)
         count += 1
         colon_position = int(line.find(":"))
         extract = line[colon_position+1:]
         number_extract = float(extract)
         sum += number_extract
print("Extracted lines", count)
print("Sum of confidence values", sum)
print("Average of confidence values", sum/count)

3 个答案:

答案 0 :(得分:0)

您的问题是,如果没有例外,fhand只会被分配一个值。

您写道:

try: 
    fhand = open(user)
except:
    print("Not a valid file")

因此,在异常情况下,fhand未分配值。这意味着当你尝试迭代它时,Python会抛出一个NameError,因为它从未被定义过。

也许你想要的是在异常的情况下终止?例如:

import sys
try: 
    fhand = open(user)
except:
    print("Not a valid file")
    sys.exit()

或者将默认值指定给fhand

import sys
try: 
    fhand = open(user)
except:
    print("Not a valid file")
    fhand = 'Default content'

答案 1 :(得分:0)

最可能的原因是,如果在打开文件期间发生错误,则会显示警告消息&#34;不是有效文件&#34;,但处理会继续。

在这种情况下,不会为fhand分配值,并且会有NameError

您可能需要一个循环,重复询问文件名,并且只有break在文件成功打开时才会输出。

while True:
     name = input("filename ... ")
     try:
         fhand = open(name)
     except OSerror:   # only catch OS errors, not everything. 
         print("not a valid file") 
     else:
         break

答案 2 :(得分:0)

fhand是一个文件对象

try: 
    fhand = open(user)
except:
    print("Not a valid file")

您无法在文件对象上执行以下操作。

for line in fhand:

你需要这样做:

for line in fhand.readlines():

这对你来说不是问题,但很快就会出现问题。

你真正的问题是:

当这段代码

  try: 
        fhand = open(user)

抛出异常,fhand变量无法创建,因此您需要退出except块。

try: 
    fhand = open(user)
except:
    print("Not a valid file")
    sys.exit(1)