使用 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
我有以下文件夹结构
文件夹里面的文件夹,里面的文件就像这个例子
我正在尝试使用以下内容来解析文件夹,但它没有返回任何内容,也没有出现任何错误。
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