#python #python-3.x
#python #python-3.x
Вопрос:
Когда я пишу скрипт командной строки на python, я предполагаю, что его можно вызвать из любого места. Кажется, это вызывает несоответствие, когда я хочу передать список файлов в скрипт.
Передача файлов с использованием аргументов list или wildcard (независимо от того, расширен ли bash в * nix или glob.glob с Windows) вернет либо относительный путь, либо абсолютный, в зависимости от того, как был описан путь к файлу, но это, похоже, дает два разных поведения, которые необходимо либо проверить, либо согласовать.
Если скрипт находится в том же каталоге, что и импортируемые файлы, на самом деле это не проблема, но если скрипт находится в другом каталоге, кажется, что вам нужно сначала получить абсолютный путь:
import os,sys,glob
for arg in sys.argv[1:]:
file_list = glob.glob(arg)
for fn in file_list:
print("File Reference: {}".format(os.path.abspath(fn)))
> pwd
/Users/user1/Desktop/script_dir/
> cd ~/Desktop
> script_dir/test.py test_dir/*.csv /Users/user1/Desktop/test_dir/*.txt
File Reference: /Users/user1/Desktop/test_dir/temp1.csv
File Reference: /Users/user1/Desktop/test_dir/temp2.csv
File Reference: /Users/user1/Desktop/test_dir/temp1.txt
File Reference: /Users/user1/Desktop/test_dir/temp2.txt
Предполагая, что программа продолжала что-то делать с файлами, она затем будет манипулировать ими по абсолютному пути. Правильно ли это здесь делать? Это кажется странно запутанным, и я, кажется, могу найти любые ссылки, которые описывают это.
Комментарии:
1. Вы можете использовать
pathlib.Path.cwd()
для получения текущего рабочего каталога, из которого был вызван скрипт, если это полезно. Я бы просто предложил использоватьpathlib.Path
, и он должен знать, является ли указанный путь абсолютным или относительным для вас, IIRC.2. Я не уверен, как это устраняет проблему. В некотором смысле, мне все равно, где находится скрипт, меня волнует только то, что он управляет файлами в каталоге, в котором пользователь находится в данный момент. Возможно, мне следует уточнить это в примере кода.
3. Обратите внимание, что я отредактировал свой комментарий. В любом случае, я не понимаю реальной проблемы здесь; если вы укажете абсолютный путь, он использует его, если вы укажете относительный путь, он использует это. Вы все еще можете перемещаться по относительным путям и абсолютным путям, как вам нужно, и вам не нужно использовать особый случай — Python будет работать с обоими. Вы просто хотите иметь возможность каждый раз регистрировать абсолютный путь? Тогда просто
abspath
это, прежде чем вы это напишете. Я думаю, нам нужен MCVE актуальной проблемы здесь, если она есть.4. «В некотором смысле, мне все равно, где находится скрипт, меня волнует только то, что он управляет файлами в каталоге, в котором в данный момент находится пользователь». это то, что является текущим рабочим каталогом, это не путь, в котором находится скрипт, это эквивалентно проверке
cwd
в терминале. Python использует текущий рабочий каталог по умолчанию для относительных путей.5. Вам не нужно делать ничего особенного. Просто используйте пути, которые указал пользователь. ОС автоматически интерпретирует относительные пути должным образом.