Python 2.7 - 在目录中的文件名中过滤带有特定字符串的文件

时间:2017-03-14 16:02:16

标签: python python-2.7

我想通过使用特定字符串

过滤文件名,将文件从一个目录移动到另一个目录

似乎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']

6 个答案:

答案 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)

使用glob模块进行过滤:

导入glob

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']

文件扩展名.txt:

files = glob.glob("/home/ach/*/*.txt")

一个字符

glob.glob("/home/ach/file?.txt")

数字范围

glob.glob("/home/ach/*[0-9]*")

字母范围

glob.glob("/home/ach/[a-c]*")