#python #cmd
#python #cmd
Вопрос:
Я кодирую скрипт, который либо архивирует папку hall, либо вы можете выбрать файлы с определенным расширением, такие как «.txt». Я использую sys.argv для передачи пути к папке и расширения, если это необходимо. Однако, когда я передаю путь, единственное, что я получаю, это эта ошибка:
fileEx = sys.argv[2]
IndexError: list index out of range
Как я могу сделать командную строку «расширение файла» необязательной?
Мой скрипт:
import zipfile, os, sys
if len(sys.argv) < 2:
folder_path = sys.argv[1]
fileEx = None
else:
folder_path = sys.argv[1]
fileEx = sys.argv[2]
def zipf(folder_path, fileEx=None):
folder_path = os.path.abspath(folder_path)
number = 1
while True:
zipfilename= os.path.basename(folder_path) "_" str(number) '.zip'
if not os.path.exists(zipfilename):
break
number = number 1
# creat the zip file
print(f'creating {zipfilename}')
backupZip = zipfile.ZipFile(zipfilename, 'w')
# walking through folders
for foldername , subfolders , filenames in os.walk(folder_path):
print(f'Adding files in {foldername}. . . ')
#adding the folder
backupZip.write(foldername)
# adding all files in the folder to zipfile
for filename in filenames:
newBase = os.path.basename(folder_path) '_'
if filename.startswith(newBase) and filename.endswith('.zip'):
continue
if fileEx:
if filename.endswith(fileEx):
os.chdir(foldername)
backupZip.write(os.path.join(foldername, filename))
else:
backupZip.write(os.path.join(foldername, filename))
backupZip.close()
zipf("folder_path, fileEx")
Комментарии:
1. Если длина
argv
равна 2, то максимальный индекс, который вы можете использовать, равен 1. Измените условное обозначение наif argv.len < 3
илиif argv.len <= 2
в зависимости от вашего предпочтительного стиля2. Вы также можете использовать
argparse
.3. большое вам спасибо, это сработало
4. Я согласен с @r0ei. Если это останется простым скриптом, то индексирование
argv
напрямую подойдет иargparse
приведет к ненужному раздуванию проекта. но для чего-то гораздо большего argparse значительно улучшает общую читаемость и удобство обслуживания