Return 只有某些没有扩展名的文件名

Return only certain filename without extension

因此,根据我之前询问的 post,我发现以下代码有效:

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

但是,现在我希望此列表仅 return 某种类型的文件,例如仅 .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)

如果我没理解错的话,您想检查每个文件名并且 return 只检查没有扩展名的特定文件类型? 由于您正在研究 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

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

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

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

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)