遍历目录、子目录,以获取具有专门 ext 的文件。 , 复制到新目录

Iterate through directories, subdirectories, to get files with specialized ext. , copy in new directory

我有一个问题,我已经解决了所有其他主题的类似问题,但我没有得到解决。

我有一个文件夹,其中有两个子文件夹。它们里面有很多文件,但我只需要扩展名为 .trl 的文件。我需要复制它们并将它们保存在一个已经创建的新文件夹中。 我的代码没有给我错误,但我没有看到任何结果。我做错了什么?

import os
import shutil
import fnmatch

directory = "/home/.../test_daten"
ext = ('.trl')
dest_dir = "/home/.../test_korpus"

for root, dirs, files in os.walk(directory):
    for extension in ext:
        for filename in fnmatch.filter(files, extension+'.trl'):
            source = (os.path.join(root, filename))
            shutil.copy2(source, dest_dir)

使用os.walk() 并找到所有文件。然后用endswith()查找以.trl.

结尾的文件 示例代码:

import os, shutil;

directory = "/home/.../test_daten";
dest_dir = "/home/.../test_korpus";

filelist = [];

for root, dirs, files in os.walk(directory):
    for file in files:
        filelist.append(os.path.join(root,file));

for trlFile in filelist:
    if trlFile.endswith(".trl"):
        shutil.copy(trlFile, dest_dir);

也许您的问题是 fnmatch.filter(files, extension+'.trl')。你有来自 for extension in ext:extension 它将循环遍历变量 ext 并每次给你一个来自它的字母。 Your extension+'.trl 将是 ..trl, t.trl, l.trl

import os
import shutil

directory = "/home/.../test_daten"
dest_dir = "/home/.../test_korpus"

for root, _, files in os.walk(directory): #Get the root, files
    for x in files:
        if x.endswith('.trl'): #Check the extension
            shutil.copy2(f'{root}/{x}', dest_dir)
import os
import shutil
import fnmatch

source = "/home/.../test_daten"
ext = '*.trl'
target = "/home/.../test_korpus"

for root, _, files in os.walk(source):
    for filename in fnmatch.filter(files, ext):
        shutil.copy2(os.path.join(root, filename), target)