2016-10-20 4 views
2

私は "学習するpythonの難しい道"演習20に取り組んでいます。レッスンでは、ファイルを参照するための "seek()"関数が導入されています。この場合において、我々は: Python:seek(0)とopen()は本質的に同じことをしていますか?

def rewind(f): 
    f.seek(0) 

シーク起動する関数を作成(0)、プログラムで使用されるファイルの先頭に基準点を作ることを意味します。さて、いくつかのレッスンでは、ファイルを開くために使用する変数(この場合はcurrent_file = open(input_file))を割り当てました。

私の質問は、先頭から(0)を使ってファイルを開くためにseekを使用するかどうかは、open(current_file)のようにopenコマンドを再度使用するのと同じことです。もしあれば、違いは何ですか?ここでは全体のレッスンのためのコードは次のとおりです。

from sys import argv 

script, input_file = argv 

def print_all(f): 
    print f.read() 

def rewind(f): 
    f.seek(0) 

def print_a_line(line_count, f): 
    print line_count, f.readline() 

current_file = open(input_file) 

print "First let's print the whole file:\n" 

print_all(current_file) 

print "Now let's rewind, kind of like a tape." 

rewind(current_file) 

print "Let's print three lines:" 

current_line = 1 
print_a_line(current_line, current_file) 

current_line = current_line + 1 
print_a_line(current_line, current_file) 

current_line = current_line + 1 
print_a_line(current_line, current_file) 
+0

Seekはファイルを開かず、現在のファイルを巻き戻します。私はそれがあなたが意味するものだと確信していますが、 "最初からファイルを開く(0)"という名前の_を使用してファイルをオープンしようとします。明確にすることはできますか? – tdelaney

+1

btw 'open(...、" a ")'はファイルを開き、 'seek(0、2)'を行うようにポインタをファイルの最後に移動します。 – furas

+0

FYI:http://sopython.com/wiki/LPTHW_Complaints – jonrsharpe

答えて

2

いいえ、ファイル名open作品に対し開かれたファイルオブジェクトseek作品、あなたのコード例が示すようにので。

f = open('myfile.txt') 
f.seek(5) 

は、あなたが代わりに常にゼロに求めているのファイルを再度開くことができ、それは余分なオーバーヘッドのようになります。違いは、簡単な例では、それが明確になるかもしれない、ちょっと微妙です。

+0

余分なオーバーヘッドを越えて、名前のないファイルを開いた場合(おそらく 'tempfile.TemporaryFile'の実装のようにファイルを開いた直後にファイルが削除されたため)、ファイルを再オープンすることはできませんが、開始。同様に、 'gzip.open'のような他のファイルのようなオブジェクトの場合、' fileobj.name'でプレーン 'open'を呼び出すだけでは、逆方向を探すことと同等の振る舞いをしません。 – ShadowRanger

関連する問題