仅返回没有扩展名的特定文件名

时间:2016-06-06 10:18:11

标签: python os.walk

所以从我之前发过的帖子中我发现以下代码可以工作:

b = os.walk('C:\\Users\\USER\\Desktop\\FOLDER')
f = [] 
for(dirpath, dirnames, filenames) in b:
    f.extend(os.path.splitext(name)[0] for name in filenames)
    break

但是,现在我希望此列表只返回某种类型的文件,例如只有.JPEG或.GIF文件(仍然没有扩展名)。

我已经尝试过使用fnmatch,但它没有用。

评论后我将代码更改为:

b = os.walk('C:\\Users\\USER\\Desktop\\FOLDER')
os.listdir('C:\\Users\\USER\\Desktop\\FOLDER')
f = []
for(dirpath, dirnames, filenames) in b:
    f.extend(os.path.splitext(name)[0] for name in filenames if name.lower().endswith((".jpeg", ".gif")))

def save_to_file(text):
    for name in f:
        with open('C:\\Users\\USER\\Desktop\\FOLDER\\test.txt', mode='wt', encoding='utf-8') as myfile:
            myfile.write('\n'.join(text))
            myfile.write('\n')

save_to_file(f)

3 个答案:

答案 0 :(得分:1)

您可以使用 str.endswith 传递扩展元组:

f.extend((os.path.splitext(name)[0] for name in filenames if name.lower().endswith((".jpeg", ".gif")))

我不确定为什么你的for循环中有一个 break ,因为这意味着你可以使用os.listdir

循环一个目录

答案 1 :(得分:1)

def find_files_by_filter(folder_path, filter):

    """
    :rtype : list
    """
    if not isdir(folder_path):
        log('Folder path: '+ str(folder_path) + ' not found')
        return []

    re_filter = re.compile(filter)
    all_files = listdir(folder_path)
    result = [file for file in all_files if re_filter.search(file)]
    return result

下:

file_name = []
for res in result:
    file_name.append(res.split('.')[0]
print(file_name)

答案 2 :(得分:0)

如果我理解正确,您想检查每个文件名并仅返回不带扩展名的特定文件类型? 由于您正在使用 Windows ,我猜您可以这样做:

for filename in files:
    try:
        ext = filename.split('.')
        if ext[1].lower() == 'gif' or ext[1].lower() == 'jpeg':
            print ext[0]
    except IndexError:
        continue