【问题标题】:How to update the file size on desk while python file writing program runspython文件写入程序运行时如何更新桌面上的文件大小
【发布时间】:2018-07-14 13:12:33
【问题描述】:

我有一个执行套接字连接、获取一些数据并将它们写入文件的 python 程序。数据相当大。我需要确保在程序运行时写入进度良好,方法是单击文件属性以查看文件大小随着程序运行时间的延长而增加。

为了简化,问题的主要逻辑出现在这个简单的例子中:

myfile = open ("test.txt","w")
x = 0
while x < 1000000:
    myfile.write("line:"+str(x))
    print("line",str(x))
    x+=1

这个程序写了 100 万行。在写作过程中,我检查了文件大小,它总是 0 KB。只有当程序完成时,我才能看到文件大小。这对我来说很不方便。

1) 这是什么原因?我记得我已经运行了程序,但是在程序运行时我能够看到文件大小的进度? 我不确定它是否是 python 程序,但我通常这样做是为了监控进度。

2)我如何反映文件写入进度,所以当我在python程序运行时单击文件属性时,我可以看到文件大小增加了。

更新: 不幸的是,这些解决方案似乎都不实用。首先,我有目的地用“w”进行新的写作。程序应该在每次运行时写入新的数据。我不想追加。其次,程序应该在循环中一次写入数据。最后,我应该关闭文件(我错过了)。 我需要的是同步或刷新之类的东西。我不认为关闭文件以进行需要 10 万次迭代的循环是不切实际的。

【问题讨论】:

  • 因为写入是缓冲的。以python -u script.py 身份运行脚本有帮助吗?
  • @user9371654,据我所知,您正在调用 write,它会覆盖文件的内容。
  • @lmiuelvargasf 是的。如果我想追加我在打开带有“a”参数的文件时添加第二个参数。您还有其他建议吗?
  • @user9371654,具体有什么建议?
  • @heemayl python -u script.py 没有任何区别。

标签: python python-3.x file file-writing


【解决方案1】:

您应该关闭您打开的每个文件,但您可以使用上下文管理器来避免调用 close。此外,您使用的是'w' 模式,每次打开它都会覆盖文件的内容,因此您必须更改为'a'(追加模式),才能看到文件大小增加。

x = 0
while x < 1000000:
    with open ("test.txt", "a") as myfile:
        myfile = open ("test.txt","a") #opens file to append
        myfile.write("line:"+str(x)) # appends to file
    print("line", x) # no need to call str
    x += 1

【讨论】:

  • 不错的解决方案。我们哪一个更快?
  • @lmiuelvargasf 我想在每次运行时写入新数据。所以“w”是有目的的。我想看到在同一次运行中的增加。在同一篇文章中(我跑了很长时间,需要很长时间)。
  • @Agile_Eagle,看来我的解决方案要快一些。我在 jupyter 中使用 %time 来查看你和我的,我的需要:7.15 µs,而你的需要 10us。
  • @user9371654,如果你每次都写它,问题是最后只计算最后一次迭代,你几乎不会注意到文件大小的增加。
【解决方案2】:

这将花费更多时间,但会实现您的目标。重要的是每次都关闭文件。

x = 0
while x < 1000000:
    myfile = open ("test.txt","a") #opens file to append
    myfile.write("line:"+str(x)) # appends to file
    myfile.close() # closes file(this will update the file size each time)
    print("line",str(x))
    x+=1

【讨论】:

  • 我不明白你为什么被否决,我认为你的答案是正确的,所以+1(从我这边)。
  • @Agile_Eagle 我认为关闭文件以进行可能需要 10 小时的运行是不切实际的。我在一次运行中连续写作。是的,我应该关闭文件,但在运行结束时。我故意做“w”。每次运行我都需要新数据。
  • @user9371654 好的,你的愿望。我写这个问题的时候不知道
【解决方案3】:

每次添加新数据时都需要关闭文件。

【讨论】:

  • 但是你还需要打开它来追加。如果你打开它写入初始数据将被擦除
  • 是的..这很正常,只有在和愚蠢的人交谈时才需要明确写出来
  • 但你不能假设 OP 知道这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
相关资源
最近更新 更多