对象不能用inputfile迭代

时间:2012-08-09 23:41:08

标签: python file-io

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

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()

我觉得这有一个非常简单的解决方案,但我显然很想念它。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您遇到的问题是由于您在输入循环中的条件。当fileinput.inputinplace=1参数一起使用时,它会重命名原始文件,添加“备份”扩展名(默认为“.bak”),并将标准输出重定向到具有原始名称的新文件。 / p>

您的循环只打印您正在编辑的行。因此,所有不匹配的行都会从文件中过滤掉。您可以通过打印迭代的每一行来解决此问题,即使它不匹配也是如此。这是你的循环的改进版本:

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块。