Кажется, я вспоминаю случаи на языках более низкого уровня, которые открывают файл более одного раза в программе, что может привести к общему указателю поиска. Путаясь в 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'
Насколько безопасно это поведение? Мне сложно найти источник, говорящий, что все в порядке, и это очень помогло бы, если бы я мог зависеть от этого.
Я не вижу позицию как атрибут файлового объекта, иначе я был бы уверен в этом. Я знаю, что он может храниться внутри итератора, но idk, как .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']
UPDATE
На странице 161 Основная ссылка Python содержит
Тот же файл можно открыть несколько раз в одной программе (или в разные программы). Каждый экземпляр открытого файла имеет свои собственные который может управляться независимо.
Таким образом, похоже, что это действительно безопасное, определенное поведение