【问题标题】:python load file content with no context managerpython加载没有上下文管理器的文件内容
【发布时间】:2020-06-24 16:08:49
【问题描述】:

我这样做:

f = open('foo.txt', 'rb')
ii = (x for x in f.readlines())
f.close()

print(next(ii))

我在使用迭代器并在文件关闭后调用 next 时发现此代码的实现存在问题。

由于使用迭代器并在文件关闭后在迭代器上执行而不管不使用上下文管理器,这种实现是否没有问题?

【问题讨论】:

  • 使用with open('foo.txt', 'rb') as f: ii = (x for x in f.readlines());print(next(ii))可以实现相同的行为

标签: python file iterator


【解决方案1】:

不是,因为f.readlines() 在创建生成器表达式时被计算:

f = open('foo.txt', 'rb')
ii = (x for x in f.readlines())
print(f.tell()) # nonzero for non-empty file (shows how far we read)
f.close()

请注意,虽然我们从未调用过next,但文件的内容已经加载完毕。

【讨论】:

    猜你喜欢
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    相关资源
    最近更新 更多