搜索包含列表中的单词并具有特定文件扩展名的文件名
Posted
技术标签:
【中文标题】搜索包含列表中的单词并具有特定文件扩展名的文件名【英文标题】:Search for file names that contain words from a list and have a certain file extension 【发布时间】:2016-08-29 18:55:47 【问题描述】:python 初学者。我正在尝试在用户文件夹中搜索保存在文件夹中的非法内容。我想从下面的列表中查找包含一个或多个单词的所有文件,并且这些文件还具有列出的扩展名。
我可以使用 file.endswith 搜索文件,但不知道如何添加 word 条件。
我浏览了该网站,我只知道如何搜索某个单词而不是单词列表。
提前谢谢你
import os
L = ['720p','aac','ac3','bdrip','brrip','demonoid','disc','hdtv','dvdrip',
'edition','sample','torrent','www','x264','xvid']
for root, dirs, files in os.walk("Y:\User Folders\"):
for file in files:
if file.endswith(('*.7z','.3gp','.alb','.ape','.avi','.cbr','.cbz','.cue','.divx','.epub','.flac',
'.flv','.idx','.iso','.m2ts','.m2v','.m3u','.m4a','.m4b','.m4p','.m4v','.md5',
'.mkv','.mobi','.mov','.mp3','.mp4','.mpeg','.mpg','.mta','.nfo','.ogg','.ogm',
'.pla','.rar','.rm','.rmvb','.sfap0','.sfk','.sfv','.sls','.smfmf','.srt,''.sub',
'.torrent','.vob','.wav','.wma','.wmv','.wpl','.zip')):
print(os.path.join(root, file))
【问题讨论】:
您要检测文件名或文件内容中的禁用词吗?我假设您关心文件名中的单词。for tag in L: if tag in file:
?
@JanVlcinsky 嗨 Jan,是的,我正在寻找文件名中的禁用词。
@jDo 补充说 in 似乎正在工作。它只查找包含标签并具有所述文件扩展名之一的文件。唯一的问题是它的搜索速度很慢。
【参考方案1】:
也许最好进行反向搜索,并显示与您想要的文件类型不匹配的文件的警告。例如,您可以这样做:
if file.endswith(".txt", ".py"):
print("File is ok!")
else:
print("File is not ok!")
【讨论】:
【参考方案2】:使用来自py
包的py.path.local
py
软件包(由$ pip install py
安装)为处理文件提供了一个非常好的界面。
from py.path import local
def isbadname(path):
bad_extensions = [".pyc", "txt"]
bad_names = ["code", "xml"]
return (path.ext in bad_extensions) or (path.purebasename in bad_names)
for path in local(".").visit(isbadname):
print(path.strpath)
解释:
导入
from py.path import local
py.path.local
函数创建“对象化”文件名。为了保持我的代码简短,我导入
这样就只能使用local
来对象化文件名字符串。
创建本地目录的对象化路径:
local(".")
创建的对象不是字符串,而是一个对象,它有很多有趣的属性和方法。
列出某个目录中的所有文件:
local(".").visit("*.txt")
返回一个生成器,提供扩展名为 ".txt".
的文件的所有路径。
检测要生成的文件的另一种方法是提供一个函数,该函数获取参数path
(对象化文件名),如果要使用该文件,则返回True
,否则返回False
。
isbadname
函数正是用于此目的。
如果您想通过 Google 搜索更多信息,请使用 py path local(名称 py
的点击率不高)。
更多信息请见https://py.readthedocs.io/en/latest/path.html
注意,如果你使用pytest
包,py
会随它一起安装(永远
原因 - 它使与文件名相关的测试更具可读性和更短)。
【讨论】:
谢谢,我现在就试一试。在我完成搜索并收集文件名列表后,有没有办法删除它们? @Jason 当然,这就是py.path.local
的魅力所在。拥有文件对象,执行path.remove()
。检查文档,你会喜欢的(copy
、rename
、exists
等的更多方法存在。)以上是关于搜索包含列表中的单词并具有特定文件扩展名的文件名的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用“delims =”作为扩展列表时将搜索目录包含到 FOR-DO 循环中