【问题标题】:Python file is appending output, not overwritingPython文件正在附加输出,而不是覆盖
【发布时间】:2016-06-04 07:07:34
【问题描述】:

我正在尝试读取文件并在循环中用另一个值写入(覆盖)该文件。

a="1"
b="2"

for line in list:
    if os.path.exists(str(line.rstrip('\n'))):
        print line
        with open('/ifs/data/Scripts/currentNode.txt','r+') as nodeNumber:

            if nodeNumber.readline().rstrip('\n') == a:
                print "Origin 1"
                nodeNumber.write("2")
#                nodeNumber.close()

            elif nodeNumber.readline().rstrip('\n') == b:
                print "Origin 2"
                nodeNumber.write("1")
#                nodeNumber.close()

        time.sleep(5)

上面的代码只打印“Origin 1”。文件 currentNode.txt 中有数字 1。由于某种原因,它不会覆盖文件。如果我输出文件,我会看到“1”,但如果我打开文件,我会看到

1
2

任何想法为什么文件没有被覆盖?我睡了 5 秒,以为代码运行得很快。

谢谢。

【问题讨论】:

  • 它不会被覆盖,因为您以r+ 的身份打开了文件。尝试用w打开覆盖
  • 我希望能够读取该文件。 w 将覆盖文件中的内容。基本上当我运行脚本时,如果文件有 1:我想要 2,如果文件有 2:我想要 1。
  • 注意:避免使用list作为变量名,因为这也是一个Python函数。
  • 然后读取文件,关闭它,弄清楚要写什么,重新打开,写
  • 如果第一行 if 计算结果为 False 两次不是同一行,您还意识到您正在阅读两行?此外,如果行可以 str.stripped 那么它已经是一个 str

标签: python file append


【解决方案1】:

以下是在 python 中使用 seek() 和 truncate() 读取和覆盖文件的方法:

a="1"
b="2"

f = open('/ifs/data/Scripts/currentNode.txt', 'r+')
contents = f.read()
f.seek(0)
f.truncate()
if a in contents:
    print "Origin 1"
    f.write(b)
elif b in contents:
    print "Origin 2"
    f.write(a)
f.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 2018-09-15
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多