【问题标题】:os.path.getsize() returns "0"os.path.getsize() 返回“0”
【发布时间】:2020-07-25 17:30:12
【问题描述】:

当我尝试使用 os.path.getsize() 时得到“0”输出

不确定出了什么问题,使用 PyCharm,我看到文件已创建并且“cmets”已添加到文件中。但是 PyCharm 显示输出“0”:(

代码如下:

import os
def create_python_script(filename):
  comments = "# Start of a new Python program"
  with open(filename, "w") as file:
    file.write(comments)
    filesize = os.path.getsize(filename)
  return(filesize)

print(create_python_script("program.py"))

请指出我没有看到的错误。

【问题讨论】:

  • 尝试在文件关闭后获取文件大小,即在with open(...)之外
  • 是的,这是工作。谢谢!
  • 在上下文管理器之外使用 filesize = os.path.getsize(filename)
  • 由于这是通过取消缩进filesize 来解决的,因此我投票结束由于错字/不可重现的问题。

标签: python python-3.x os.path


【解决方案1】:

由于write 函数的特殊行为,您将获得0 的大小。

当您调用write 函数时,它会将内容写入internal buffer。保留internal buffer 以限制性能(以限制过于频繁的 I/O 调用)。

因此,在这种情况下,当您调用getsize 函数时,您无法确保数据/内容已实际转储到磁盘上的文件中。

with open(filename, "w") as file:
    file.write(comments)
    filesize = os.path.getsize(filename)

为了确保在调用getsize函数之前将内容转储到文件中,可以调用flush方法。

  • flush 方法清除内部缓冲区并将所有内容转储到磁盘上的文件中。
with open(filename, "w") as file:
    file.write(comments)
    file.flush()
    filesize = os.path.getsize(filename)

或者,更好的方法是先关闭文件,然后调用getsize 方法。

with open(filename, "w") as file:
    file.write(comments)
filesize = os.path.getsize(filename)

【讨论】:

    猜你喜欢
    • 2012-05-11
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2016-10-28
    • 2019-02-20
    相关资源
    最近更新 更多