【问题标题】:Why loop overwriting my file instead of writing after text?为什么循环覆盖我的文件而不是在文本之后写入?
【发布时间】:2012-10-25 13:19:17
【问题描述】:
i = 1 # keep track of file number
directory = '/some/directory/'


for i in range(1, 5170): #number of files in directory
    filename = directory + 'D' + str(i) + '.txt'
    input = open(filename)
    output = open('output.txt', 'w')
    input.readline() #ignore first line
    for g in range(0, 7): #write next seven lines to output.txt
        output.write(input.readline())

    output.write('\n') #add newline to avoid mess
    output.close()
    input.close()
    i = i + 1

我有这段代码,我正在尝试获取一个文件并将其重写为 output.txt,但是当我想附加下一个文件时,我的代码会覆盖已附加的旧文件。结果当代码完成时,我有这样的东西:

dataA[5169]=26
dataB[5169]=0
dataC[5169]=y
dataD[5169]='something'
dataE[5169]=x
data_date[5169]=2012.06.02

而不是从文件 0 到 5169 的数据。任何提示如何修复它?

【问题讨论】:

    标签: python


    【解决方案1】:

    您可能希望在 for 循环之前打开 output.txt(然后在之后打开 close)。如其所写,每次打开文件output.txt 时都会覆盖它。 (另一种方法是打开附加:output = open('output.txt','a'),但这绝对不是最好的方法......

    当然,现在最好使用上下文管理器(with 声明):

    i = 1 # keep track of file number <-- This line is useless in the code you posted
    directory = '/some/directory/'  #<-- os.path.join is better for this stuff.
    with open('output.txt','w') as output:
    
        for i in range(1, 5170): #number of files in directory
            filename = directory + 'D' + str(i) + '.txt'
            with open(filename) as input:
    
                input.readline() #ignore first line
                for g in range(0, 7): #write next seven lines to output.txt
                    output.write(input.readline())
    
                output.write('\n') #add newline to avoid mess
            i = i + 1   #<---also useless line in the code you posted
    

    【讨论】:

    • @sr2222 -- 这是我刚才所说的同一件事的变体:)
    • 很公平。虽然使用with,但您的家务已为您完成(包括异常状态,这里根本不处理)。
    • 我不是没用的,我用它做别的事
    • @sr2222 -- 你当然是对的。 (当您提出建议时,我正在添加该内容)。我只想说明这是一个逻辑错误,而不是缺乏使用一个非常强大的python特性导致了这个错误。
    • @zuberuber -- 很公平,但就您发布的代码而言,它是无用的。 :-)。据我所知,您可能对循环的工作方式有误解,我认为指出 i 在您增加后未使用它可能会对您有所帮助。另请注意,同样可以写成i += 1。
    【解决方案2】:

    您的问题是您以写入模式打开。要附加到您要使用附加的文件。见here。

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 2017-11-11
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多