我似乎记得在程序中多次打开文件可能会导致共享查找指针的低级语言的情况。通过在 Python 中搞乱一点,这对我来说似乎没有发生:
$ cat file.txt
first line!
second
third
fourth
and fifth
>>> f1 = open('file.txt')
>>> f2 = open('file.txt')
>>> f1.readline()
'first line!\n'
>>> f2.read()
'first line!\nsecond\nthird\nfourth\nand fifth\n'
>>> f1.readline()
'second\n'
>>> f2.read()
''
>>> f2.seek(0)
>>> f1.readline()
'third\n'
这种行为是否安全?我很难找到一个说没关系的消息来源,如果我能依赖这个,那会很有帮助。
我没有将位置视为文件对象的属性,否则我对此更有信心。我知道它可以在迭代器内部保存,但不知道 .tell() 在这种情况下如何得到它。
>>> dir(f1)
['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__',
'__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__str__', 'close', 'closed', 'encoding', 'fileno', 'flush',
'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline',
'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines',
'xreadlines']
更新在Python Essential Reference
的第 161 页上,它指出
同一个文件可以在同一个程序(或不同程序)中多次打开。打开文件的每个实例都有自己的文件指针,可以独立操作。
所以它实际上似乎是安全的、明确的行为