我想通过使用特定字符串
过滤文件名,将文件从一个目录移动到另一个目录似乎fnmatch或glob可以做到这一点,但我无法弄明白
在下面的示例中,如何使用文件名中的过滤器 High_Quality 将python仅将文件 test_High_Quality.mb 移动到另一个目录
>>> import os
>>> myPath = "C:\Project"
>>> os.listdir('myPath')
>>> ['test_Draft.txt', 'test_Mid_Quality.txt', 'test_High_Quality.txt']
答案 0 :(得分:2)
使用文件名" High_Quality"
进行过滤[d for d in os.listdir('myPath') if 'High_Quality' in d]
要移至其他目录,请按此解决方案similar question
答案 1 :(得分:1)
您可以使用glob.glob()
功能搜索匹配模式的文件名。
> from glob import glob
> glob("C:\Project\*High_Quality*")
['test_High_Quality.txt']
有关详细信息,请参阅链接的文档。
答案 2 :(得分:1)
使用filter
的另一种方法:
high_quality = filter(lambda fname: 'High_Quality' in fname, os.listdir('myPath'))
将high_quality
转换为列表或设置是否要多次迭代它(filter
返回生成器)。
答案 3 :(得分:1)
您可以使用fnmatch
模块中的filter
方法用于相同目的,非常简单的应用程序,只需确保根据需要构建正确的模式,例如匹配包括{{ 1}}:
High_Quality
答案 4 :(得分:0)
如果你把这个文件放在一个空的目录中,你可以看到glob对你来说是如何工作的。你只需要*High_Quality*
作为你的glob模式:
from __future__ import print_function
import glob
import os
filenames = [
'fnord.txt',
'fizzy.txt',
'test_Low_Quality.txt',
'test_Mid_Quality.txt',
'test_High_Quality.txt',
'test_High_Quality_one.txt',
'test_High_Quality_two.txt',
]
for filename in filenames:
with open(filename, 'w'): pass
print('Files:')
print('\t', '\n\t'.join(os.listdir(os.curdir)), sep='')
print('Files matching *High_Quality*:')
print('\t', '\n\t'.join(glob.glob('*High_Quality*')), sep='')
答案 5 :(得分:0)
import glob
pattern='*High_Quality*'
files=glob.glob(pattern)
files=glob.glob("data/*")
print(files)
Out:
['data/ks_10000_0', 'data/ks_1000_0', 'data/ks_100_0', 'data/ks_100_1',
'data/ks_100_2', 'data/ks_106_0', 'data/ks_19_0', 'data/ks_200_0', 'data/ks_200_1',
'data/ks_300_0', 'data/ks_30_0', 'data/ks_400_0', 'data/ks_40_0', 'data/ks_45_0',
'data/ks_4_0', 'data/ks_500_0', 'data/ks_50_0', 'data/ks_50_1', 'data/ks_60_0',
'data/ks_82_0', 'data/ks_lecture_dp_1', 'data/ks_lecture_dp_2']
files = glob.glob("/home/ach/*/*.txt")
glob.glob("/home/ach/file?.txt")
glob.glob("/home/ach/*[0-9]*")
glob.glob("/home/ach/[a-c]*")