プログラムでファイルを複数回開くと、シークポインタが共有される可能性がある低レベル言語のケースを思い出しているようです。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()がどのようにそれに到達するかをidkします。
>>> 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エッセンシャルリファレンスの
161ページに記載されています
同じファイルを同じプログラム(または異なるプログラム)で複数回開くことができます。開いているファイルの各インスタンスには、個別に操作できる独自のファイルポインタがあります。
したがって、実際には安全で定義された動作のようです