python - 在前一个文件之上读取文件

标签 python file-io io

我想知道将一个文件读取到另一个文件是否完全安全(在关闭缓冲区之前)。对于这样的事情,我会给出的解释是,当使用相同的对象时,函数 open 会自动关闭缓冲区。

示例代码:

fr = open("asd.txt", "r")
text = fr.read()
fr.close

fr = open("asd2.txt", "r")
text = fr.read()
fr.close
...

这是同一件事吗?

fr = open("asd.txt", "r")
text = fr.read()

fr = open("asd2.txt", "r")
text = fr.read()

fr.close

最佳答案

是的,第二行是相同的,因为两个代码段都没有正确关闭文件

您必须调用 fr.close() 方法来关闭文件对象,如果没有 () 部分,该方法是只引用,不执行。因此在这两个示例中,当执行第二个 open() 调用时,'asd.txt' 文件对象仍然打开

在 CPython(可从 Python.org 下载的默认 Python 实现)中,文件对象在不再被引用时会自动关闭,因此一旦第二个 open() 调用返回并被分配,第一个随着对对象的引用被删除,打开的文件被关闭。

但是,您实际上应该使用文件对象作为上下文管理器,使用 with statement :

with open("asd.txt", "r") as fr:
    text = fr.read()

with open("asd2.txt", "r") as fr:
    text = fr.read()

而且更有可能的是,为 text 使用不同的变量名,因为现在一个变量名替换了另一个变量名。当 block 结束或该 block 中发生异常时,with 语句中的文件对象将自动关闭。

关于python - 在前一个文件之上读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32681074/

相关文章:

python - Pyspark:如何过滤两列值对的列表?

python - 使用 pydev 和 .pth 文件导入

python - "round"ed 数字乘以 0.01 结果是 x.y00000000000001 而不是 x.y?

python - 合并多个文件中的第一列

c - 以 'a+ ' 模式打开文件

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

python - 检查字符串中是否仅存在指定的 Django 模板变量

c# - 使用 TextFieldParser 处理包含未转义双引号的字段

c++ - 打开相对于已执行模块的文件

Python IOError : File not open for writing and global name 'w' is not defined 错误