0

Web サイトからデータを取得してファイルに保存する小さなスクリプトを作成しました。データは変数「content」にフェッチされます。

try:
    content = urllib.urlopen(url).read()
except:
    content = ""

ファイルにはいくつかの短いフレーズがあり、それぞれが新しい行にあります。スクリプトを実行するたびに、ファイルの最後の行を単純に更新するつもりです。そして、私は次のコードを使用しています:

try:
    f = open("MYFILENAME","r+")                     # open file for reading and writing    
    lines = f.readlines()
    replace_index = len(lines[-1])              
    f.seek(long(int(f.tell())-replace_index))       # should move to the start of last line
    # content[start:end] has no "\n" for sure.
    f.write(content[start:end] + " " + now + "\n")
except Exception as exc:
    print "This is an exception",exc
finally:
    f.close()

現在、crontab を使用してこのスクリプトを毎分実行し、「MYFILENAME」を更新しています。しかし、このスクリプトはときどき奇妙な動作をします。つまり、最後の行を置き換える代わりに、ファイルに新しい行を追加します。これらは通常、コンピューターを再起動したり、スリープ状態にした後に再使用したりすることに関連しています。

元のファイルが次の場合:

xyz
abc
bla bla bla
1 2 3

私は出力が次のようになることを期待しています:

xyz
abc
bla bla bla
my_new_small_phrase

代わりに、時々私は得る:

xyz
abc
bla bla bla
1 2 3
my_new_small_phrase

上記のコードの何が問題になっていますか? ( crontabsseek および tell関数の両方を初めて使用しているため、どちらかについてはよくわかりません。) それとも、write() 関数の末尾にある「\n」と関係がありますか?

4

1 に答える 1

1

次のようにすることもできます。

lines = open("filename", "r").readlines()
del lines[-1]

f = open("filename", "w")
for line in lines:
 f.write(line)

f.write("new content")
f.close()
于 2013-06-20T08:09:47.190 に答える