如何在python中正确覆盖文件

时间:2017-01-15 23:43:50

标签: python python-3.x

我想知道如何在python中覆盖文件。当我在open语句中使用“w”时,我的输出文件中只有一行。

    article = open("article.txt", "w")
    article.write(str(new_line))
    article.close()

请告诉我,我该如何解决问题?

3 个答案:

答案 0 :(得分:0)

“覆盖”是一个奇怪的术语;特别是因为您希望从上面的代码中看到多行

我猜你的意思是“超越”。这个词就是“附加”,你会想要'a'而不是'w'。

答案 1 :(得分:0)

如果你实际上想要逐行覆盖文件,你将需要做一些额外的工作 - 因为只有r ead可用的模式,{{1} } rite和w ppend,它们实际上都没有逐行覆盖。

看看这是否是您正在寻找的:

a

如您所见,您首先需要将文件内容“保存”到缓冲区(# Write some data to the file first. with open('file.txt', 'w') as f: for s in ['This\n', `is a\n`, `test\n`]: f.write(s) # The file now looks like this: # file.txt # >This # >is a # >test # Now overwrite new_lines = ['Some\n', 'New data\n'] with open('file.txt', 'a') as f: # Get the previous contents lines = f.readlines() # Overwrite for i in range(len(new_lines)): f.write(new_lines[i]) if len(lines) > len(new_lines): for i in range(len(new_lines), len(lines)): f.write(lines[i]) )中,然后替换它。

is how the file modes work.

的原因

答案 2 :(得分:0)

感谢您的快速回复。我想用相同的内容覆盖相同的文件。该文件由12行组成。当我运行程序时,它应该覆盖具有相同内容的内容。现在,当我使用'a'ppend模式时,只能生成12行。这是我的完整源代码:

import re
text = open("abc.txt")
for line in text:
    if re.search(r"\|+", line):
        new_line = line.replace("|", "\t\t")
        article = open("article.txt", "a")
        article.write(str(new_line)) 
        article.close()

我怎么能意识到这一点?