Python:os.isfile()和os.listdir()之间的分歧
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:os.isfile()和os.listdir()之间的分歧,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1586字,纯文字阅读大概需要3分钟。
内容图文
我想用os.remove()删除一个文件,然后对目录中的其余文件做一些工作.但是,我发现os.listdir()在超过一定大小时仍然包含已删除的文件. “好的”,我想,“os.remove()只是异步工作.没什么大不了的,我只是使用os.path.isfile()来检查文件是否已被完全删除”.事实证明这不起作用.以下代码举例说明了这个问题:
import os
with open("test/test.txt", 'w') as file:
for _ in range(100):
file.write("spam")
print os.path.isfile("test/test.txt")
print os.listdir("test/")
os.remove("test/test.txt")
print os.path.isfile("test/test.txt")
print os.listdir("test/")
这将创建一个400字节的小文件.输出如预期:
True
['test.txt']
False
[]
但是当写入的“垃圾邮件”数量增加到10 000 000(40Mb文件)时,会出现以下输出:
True
['test.txt']
False
['test.txt']
因此,isfile()非常清楚该文件已被删除,但listdir()尚未被捕获.
是否有更强大的方法来检查文件是否存在,这将始终与以下listdir()调用一致?
在Windows 7上使用Python 2.7进行测试,这是否重要.
– – 编辑
我无意立即打开任何文件;我想在列表框中显示目录中剩余的所有文件.我觉得打开每个文件来检查是否存在不必要的内容,但也许这就是pythonic的做事方式?
解决方法:
在Windows中,如果删除由其他内容打开的文件(使用FILE_SHARE_DELETE),则在关闭之前不会删除它.相反,它的条目仍然存在,标记为“删除待定”(并且您无法用一个模糊的错误打开它).我认为这是导致差异的原因 – os.path.isfile认为它存在但不再是“常规文件”.
如果是这种情况,os.path.exists应返回True.
在这种情况下,一种可能的解决方案是列出所有文件(还有过滤目录等的额外好处),即
print [f for f in os.listdir(path) if os.path.isfile(os.path.join(path,f))]
当然,当您查询条目时,当事情发生变化时,这为竞争条件提供了机会.在这种情况下,除非您有支持系统调用事务的操作系统,否则它是不可避免的.
内容总结
以上是互联网集市为您收集整理的Python:os.isfile()和os.listdir()之间的分歧全部内容,希望文章能够帮你解决Python:os.isfile()和os.listdir()之间的分歧所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。