【问题标题】:Python, how to check if file exists on Windows 10?Python,如何检查文件是否存在于 Windows 10 上?
【发布时间】:2020-04-08 21:29:55
【问题描述】:

我希望找到另一种方法来检查 Windows 10 上是否存在文件。

基本上,如果我有文件名,我希望能够确认设备在 C 盘中有该文件。

许多人建议使用 os.walk() 搜索所有 C 盘,但它需要太多时间。

您能提出解决方案吗?

提前致谢,

【问题讨论】:

  • 你为什么期望它可以做得更快?
  • 好吧,Windows 为其驱动器提供了某种搜索索引。微软提供了一些 API 来访问该搜索索引是最不可想象的。你有没有做过这方面的研究?
  • 我见过通过子进程调用文件资源管理器,然后通过资源管理器搜索文件的解决方案。但是,我试图找到一个不需要实际调用资源管理器 UI 的解决方案。最好通过 API 响应来检查文件是否存在。

标签: python windows winapi


【解决方案1】:

Explorer依赖Windows Search,并且github上有python的lib:

winsearch

或者使用 SQL:

import win32com.client

pattern = "test.txt"
path = "C:\\%"
con = win32com.client.Dispatch(r'ADODB.Connection')
rs  = win32com.client.Dispatch(r'ADODB.Recordset')
print(path)
con.Open("Provider=Search.CollatorDSO;Extended Properties='Application=Windows';")
rs.Open("SELECT System.ItemPathDisplay FROM SYSTEMINDEX WHERE System.FileName LIKE '" + pattern + "' AND System.ItemPathDisplay LIKE '" + path + "'" , con)
num = 0
while not rs.EOF:
    print(rs.Fields.Item("System.ItemPathDisplay").Value)
    num += 1
    rs.MoveNext()
if(num == 0):
    print("not exist")

或者使用另一个库:scandir 而不是 os.walk(),据说比 Windows 上的 os.walk() 快 7-50 倍。

【讨论】:

    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多