Итак, я пишу инструмент cli, который берет файл и вычисляет контрольную сумму (CRC32) для этого файла. Я хочу, чтобы мой инструмент имел опцию рекурсия . Поэтому я хочу получить список всех файлов в каталоге, чтобы я мог передать его в качестве параметра моему методу контрольной суммы.
Примечание: 'Test Dir /' - это каталог в той же папке, что и скрипт, и вводится через терминал, а не через переменную set.
Пока у меня есть:
rootDir = ['Test Dir/']
files = []
for i in rootDir:
if not os.path.isdir(i):
files.append(i)
else:
for dir_, _, files in os.walk(i):
for fileName in files:
relDir = os.path.relpath(dir_, i)
relFile = os.path.join(relDir, fileName)
files.append(relFile)
Возвращает:
['./root.py', './root.txt', 'Lv1/lv1.py', 'Lv1/lv1.pyc', 'Lv1/lv1.txt', 'Lv1/Lv2/lv2.pyc', 'Lv1/Lv2/lv2.py', 'Lv1/Lv2/lv2.txt', 'Lv1/Lv2/Lv3/lv3.txt', 'Lv1/Lv2/Lv3/lv3.py', 'Lv1/Lv2/Lv3/lv3.pyc']
Но если я введу rootDir как «Test Dir / *», я получу:
['./lv1.py', './lv1.pyc', './lv1.txt', 'Lv2/lv2.pyc', 'Lv2/lv2.py', 'Lv2/lv2.txt', 'Lv2/Lv3/lv3.txt', 'Lv2/Lv3/lv3.py', 'Lv2/Lv3/lv3.pyc', 'Test Dir/root.py', 'Test Dir/root.txt']
те же файлы, но немного другой список.
То, что я хочу, это:
['Test Dir/root.py', 'Test Dir/root.txt', 'Test Dir/Lv1/lv1.py', 'Test Dir/Lv1/lv1.pyc', 'Test Dir/Lv1/lv1.txt', 'Test Dir/Lv1/Lv2/lv2.pyc', 'Test Dir/Lv1/Lv2/lv2.py', 'Test Dir/Lv1/Lv2/lv2.txt', 'Test Dir/Lv1/Lv2/Lv3/lv3.txt', 'Test Dir/Lv1/Lv2/Lv3/lv3.py', 'Test Dir/Lv1/Lv2/Lv3/lv3.pyc']
Теперь я знаю, что могу сделать это, используя манипуляции со строками, но это не кажется очень чистым ...
Очень надеюсь, что кто-нибудь поможет мне с этим.