#python #glob #shutil
Вопрос:
У меня есть следующая структура папок
Внутри папок папки, файлы в них, как в этом примере
Я пытаюсь использовать следующее для анализа папок, но оно ничего не возвращает и не выдает никаких ошибок.
import glob
import shutil
filenames_i_want = ['70631','70632','test']
tra=['7063']
TargetFolder = r'C:ELKLOGSATHDEST'
all_files = []
for directory in tra:
files=glob.glob('C:ELKLOGSATH{}*_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’]. Как я могу передать это глобусу вместо использования*, что означало бы просмотр множества папок
Ответ №1:
glob.glob()
Возвращает список путей к файлам в соответствии с документацией. В результате ни один из этих путей к файлам не будет соответствовать тому, что вы настроили 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