python的for i in open('xxx')的用法,这样的用法好不好?当迭代完后,文件有没有关闭?

如题所述

可以这样用。通常对象删除时文件会关闭,即使没有关闭,进程退出时,文件也会自动关闭。

不过,这样写法有一个不好的地方,就是文件读写异常不好处理。

我们通常喜欢这样的方法。
for row in csv.reader(open("xxx","rb")):
if len(row)==0:continue
pass
csv是一个专门读格式化文本的小模块,速度比open直接读要快些。追问

我用的就是csv.reader(open(‘xxx’))的写法,但有朋友说这是一种不良好的编写风格,我感到疑惑。

追答

我一直都是这样用的。如果有异常数据,肯定就抛出来了。到时候再处理。 csv有一个弱点,好象是行数不能太多。 不过csv会自动关闭文件。 这个编程风格没有什么不好的。第一次看到这样的写法,我也有疑问。不过你用多了,就知道,其实这种 编程很实用。python如果只做几百行的小程序,其实不用在意稳定性。也不用在意健壮,与兼容性。越快越好。越简单越好。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-25
没有关闭 建议
with open(xxx)as f:
for i in f.xxx
xxxxxx
第2个回答  2023-07-02
import time
f = open("word.txt", "r", encoding="utf-8")
x = f.read()
time.sleep(2000)

"""
num = 0
for lines in open("word.txt", "r"):
# newline = lints.strip()
newline = lines.replace("\n", '')
my_list = newline.split(" ")
for word in my_list:
if word == "itheima":
num += 1
print(f"word.txt中有单词itheima{num}个")
time.sleep(2000)
"""
迭代完后是能关闭文件的,我实践过。第一份代码运行时去文件夹删除word.txt,会删除不了,显示被占用,而用第二份代码运行时,word.txt能被删除,也就说明python没占用此文件,迭代后就把文件关闭了
相似回答