使用 glob 和 shutil 查找和复制文件

Find and copy files with glob and shutil

我有以下文件夹结构

文件夹里面的文件夹,里面的文件就像这个例子

我正在尝试使用以下内容来解析文件夹,但它没有返回任何内容,也没有出现任何错误。

import glob
import shutil

filenames_i_want = ['70631','70632','test']
tra=['7063']
TargetFolder = r'C:\ELK\LOGS\ATH\DEST'
all_files = []
for directory in tra:
    files=glob.glob('C:\ELK\LOGS\ATH\{}\*\_data\*.txt'.format(directory))
    all_files.append(files)
for file in all_files:
    if file in filenames_i_want:
        shutil.copy2(file, TargetFolder)
        print("found")

上面的方法不起作用,也没有出现任何错误。此外,由于日期文件夹很多,更有效的方法是我可以提供一个包含日期的数组,例如 ['2021-07-19','2021-07-20','2021-07-21']。我如何将它传递给 glob 而不是使用 * 这意味着要遍历许多文件夹

glob.glob() returns 每个 documentation 的文件路径列表。因此,这些文件路径中的 none 将匹配您在 filenames_i_want.

中配置的内容

下面是一个大致基于您的代码的示例:

import glob

target_files=["t2.json" "test.json"]
dir="/tmp"
all_files=glob.glob("/tmp/*.json")
for f in all_files:
    if f in target_files:
        print(f"found target file: {f}")
    else:
        print(f"NOT a target file: {f}")

测试的输出运行:

NOT a target file: /tmp/test.json
NOT a target file: /tmp/test2.json
NOT a target file: /tmp/t2.json
NOT a target file: /tmp/test3.json

您可以尝试修改您的代码,在检查 filenames_i_want 列表时仅使用文件名:

import glob
from pathlib import Path

target_files=["t2.json", "test.json"]
dir="/tmp"
all_files=glob.glob("/tmp/*.json")
for f in all_files:
    current_path=Path(f)
    if current_path.name in target_files:
        print(f"found target file: {f}")
    else:
        print(f"X ---- NOT a target file: {f}")

修改后的代码输出:

found target file: /tmp/test.json
X ---- NOT a target file: /tmp/test2.json
found target file: /tmp/t2.json
X ---- NOT a target file: /tmp/test3.json