У меня есть функция, которая задает 2 пути к файлам:
def f(local, remote):
remote
путь может быть простым a/b/c
или немного более сложным - a*/b/c*
.Если я хочу, например, проверить, существуют ли remote
файлы, я могу сделать это, используя lambda
:
apply_on_star = lambda func, path : map(func, glob.glob(path)) if '*' in path else func(path)
# and call it with:
any(apply_on_star(os.path.isfile, remote_path))
Однако, если я хочу проверить размер файла, я использую os.stat(path).st_size
, и этоЯ не уверен, как вставить в lambda
.
В конце концов, я хочу что-то вроде этого: lambda compare_sizes file_A, file_B_may_contain_star : os.stat(file_A ).st_size == apply_on_star(os.stat.st_size, file_B_may_contain_star)
, где внутренний apply_on_star
получит размерыкаждого файла в file_B_may_contain_star
, но это не сработает.Могут ли reduce
или lambda
или что-то еще быть полезным здесь или я должен написать это в функции?
Просто чтобы уточнить - я хочу взять 2 пути, A, B, где B может содержать'*' и проверьте, если size (A) == size (B), если B не содержит '*', иначе сравните размер (A) с каждым из значений размера (glob.glob (B)).Один вариант, о котором я думаю, - это сравнить все файлы в B, используя reduce
, а затем, если то же самое, сравнить с A, но я не знаю, как