0

我基本上是在尝试用新的更新编号更新已保存文件中的一行,但它只在文件中留下一行。感觉就像它覆盖了整个文件而不是更新它。我在这里查看了其他问题,虽然他们给了我正确的模块来使用,但我似乎无法弄清楚我遇到的问题。

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.inputinplace=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 回答