gpt4 book ai didi

python - 对一个函数使用不同的文件,但由于使用 with 而导致 I/O 错误

转载 作者:太空宇宙 更新时间:2023-11-04 09:06:08 25 4
gpt4 key购买 nike

我对此很陌生,所以这个问题的答案可能相当简单。我只是没有看到它。我有一个函数,用于计算文件中出现的单词数。在我使用文件作为 fin 的函数中,如下所示。如果我尝试重新使用该函数,它会给出文件已关闭的错误。我解决了它,但它看起来很糟糕(IMO):

def lcount(keyword):
with file_to_count as fin:
return sum([1 for line in fin if keyword in line])


file_to_count = open('peer.txt', 'r')

y = lcount('bars')
print y

file_to_count = open('peer2.txt, 'r')
w = lcount('bar')

file_to_count = open('Peer2.txt', 'r')
e = lcount('table')

print w, e

如果我不重述

file_to_count = open('Peer2.txt', 'r')

第二次(在我计算'bar'之后。它会在'table'通过函数时给出I/O错误。所以代码有效,但我想用 lcount 换句话说,我是否需要每次都重述 file_to_count 或者是否有解决方案/替代方案?

感谢您的关注

最佳答案

问题是您正在使用作为上下文管理器的 with 语句。这基本上确保文件在 block 的末尾关闭。因此,您的函数关闭了文件,然后您需要再次打开它。

但是,使用全局对象也不是一个好主意,如您所见,它会(将会)引入很多细微的错误。尝试使函数不依赖于参数以外的东西。

喜欢;

def lcount(fname, keyword):
with open(fname) as fin:
# Use a generator expr. to avoid intermediate list
return sum(1 for line in fin if keyword in line)
# Or better, since True == 1
return sum(keyword in line for line in fin)

#file is closed now

fname = "peer2.txt"
words = "bars bar table".split()

# don't repeat yourself
for word in words:
print lcount(fname, word)

关于python - 对一个函数使用不同的文件,但由于使用 with 而导致 I/O 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20709254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com