- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想用 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() 之间的分歧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26812534/
对于os库有什么区别 os.listdir('.') 与 os.listdir() 它们似乎都产生相同的结果(事件目录中所有内容的列表)但是: https://www.tutorialspoint.c
Python:我想知道listdir这个方法在哪里,因为他不在模块os.py中。在这个模块中没有方法: def listdir () 最佳答案 listdir方法实际上是在C模块中实现的,根据操作系统
在Python的文件和目录操作中,os.listdir()函数是一个非常实用的函数。它可以返回指定目录下的所有文件和文件夹的名称列表,帮助我们进行文件的遍历、搜索和批量处理等操作。本文将深入探讨os.
在 Python 2.7 上, for dir in os.listdir("E:/Library/Documents/Old - Archives/Case"): print dir 打印出来
1. os.listdir()概述 os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。 例如: ?
我需要一个函数来检查一个目录是否为空,但它应该尽可能快,因为我将它用于数千个目录,最多可以有 100k 个文件。我实现了下一个,但看起来 python3 中的 kernel32 模块有问题(我在 Fi
我的书说: Calling os.listdir(path) will return a list of filename strings for each file in the path argu
我在 Linux Ubuntu 18.04 上的 Conda 虚拟环境中使用 Python 3.6.2。 我尝试了多种方法来列出特定路径的文件和目录,但我尝试的每种方法似乎只列出目录中的文件,而不是文
我正在开发一个项目,我必须编辑大约 400 个不同文件中的几行内容。它们都在同一个文件夹中,并且每个都有唯一的名称。为了这个问题,我将它们称为fileName001.conf至fileName420.
我计划获取一个巨大的数据文件夹。该文件夹的总大小约为 2TB,包含约 200 万个文件。我需要对这些文件进行一些处理(主要是删除其中 99%)。 我预计由于数据大小会出现一些问题。特别是,我想知道 P
我编写了一个 Python 脚本,用于将给定目录中的所有文件名写到一个文件中进行处理,它在我的机器上运行良好。但是当我尝试在目标机器上运行它时,它会跳过一些文件。这是我正在使用的代码的 shell :
我正在尝试从文件中读取一行并将内容用作 os.listdir 方法的参数 f = open('test.txt', "r+") test = f.readlines() contentlist = [
这个问题在这里已经有了答案: Non-alphanumeric list order from os.listdir() (14 个答案) 关闭 4 年前。 我是 Python 的新手,我正在编写一
假设文件夹A包含以下文件: 0.jpg 1.jpg 2.jpg . . . n.jpg . . . 现在,python 脚本查看文件夹 A 并使用 for path, dirs, files in o
我在目录上执行 os.listdir(),它返回如下列表: [u'Somefile.gif', u'SomeDirectory', u'SomeJPEG.jpeg'] 你的目的是什么?在我的搜索中,我
我正在运行 Windows 7 并使用空闲解释器。 os.listdir() 没有显示我桌面上的所有文件。这是我从空闲状态运行命令时得到的输出: >>> os.listdir('C:\\Use
我试图从文件夹内的每个文件中提取特定行。我编写的代码是打开每个文件并打开新的输出文件,尽管它在每个文件中循环并在某些情况下输出数据两次。我有 15 个文件,所有文件之间大约有 800,000 行。 `
我正在编写一个 python 脚本,该脚本在 Windows 8.1 机器上安装 802.1x 证书。此脚本在 Windows 8 和 Windows XP 上运行良好(尚未在其他机器上尝试过)。 我
以下代码: def tema_get_file(): logdir='T:\\' logfiles = sorted([ f for f in os.listdir(logdir) i
在我的 windows7 64 位系统中,c:/windows/system32 文件夹中有一个名为 msconfig.exe 的文件。是的,它必须存在。 但是当我使用os.listdir 搜索文件夹
我是一名优秀的程序员,十分优秀!