0

基本的に、保存されたファイルの行を新しい更新番号で更新しようとしていますが、ファイルには1行しか残りません。更新ではなく、ファイル全体を上書きしているように感じます。ここで他の質問を見ました。使用する適切なモジュールが提供されましたが、私が抱えている問題を理解できないようです。

unique = 1
for line in fileinput.input('tweet log.txt', inplace=1):
    if tweet_id in line:  #checks if ID is unique, if it is not, needs to update it
        tweet_fields = line.split(';')
        old_count  = tweet_fields[-2]
        new_count = 'retweet=%d' % (int(tweet_retweet))
        line = line.replace(old_count, new_count)
        print line
        unique = 0
if unique == 1:          #if previous if didn't find uniqueness, appends the file
    save_file = open('tweet log.txt', 'a')
    save_file.write('id='+tweet_id +';'+
                    'timestamp='+tweet_timestamp+';'+
                    'source='+tweet_source+';'+
                    'retweet='+tweet_retweet+';'+'\n')
    save_file.close()

これには非常に簡単な解決策があるように感じますが、明らかに見逃しています。前もって感謝します!

4

1 に答える 1

0

あなたが抱えている問題は、入力に対するループの条件によるものだと思います。fileinput.input引数とともに使用するとinplace=1、元のファイルの名前が変更され、「バックアップ」拡張子 (デフォルトでは「.bak」) が追加され、標準出力が元の名前の新しいファイルにリダイレクトされます。

ループは、編集中の行のみを印刷しています。このため、一致しないすべての行がファイルから除外されます。一致しない場合でも、反復する各行を印刷することでこれを修正できます。ループの変更されたバージョンは次のとおりです。

for line in fileinput.input('tweet log.txt', inplace=1):
    if tweet_id in line:
        tweet_fields = line.split(';')
        old_count  = tweet_fields[-2]
        new_count = 'retweet=%d' % (int(tweet_retweet))
        line = line.replace(old_count, new_count)
        unique = 0
    print line

唯一の変更は、print lineステートメントをifブロックの外に移動することです。

于 2012-08-10T19:39:49.877 に答える