Os.makedirs Python не понимает "~" на моем пути - PullRequest
119 голосов
/ 13 января 2010

У меня небольшая проблема с ~ в моих путях.

Этот пример кода создает несколько каталогов с именем "~ / some_dir" и не понимает, что я хотел создать some_dir в моем домашнем каталоге.

my_dir = "~/some_dir"
if not os.path.exists(my_dir):
    os.makedirs(my_dir)

Обратите внимание, что это в системе на основе Linux.

Ответы [ 5 ]

216 голосов
/ 13 января 2010

Вам необходимо расширить тильду вручную:

my_dir = os.path.expanduser('~/some_dir')
62 голосов
/ 13 января 2010

Преобразование ~/some_dir в $HOME/some_dir называется расширение тильды и является общей функцией пользовательского интерфейса. Файловая система ничего об этом не знает.

В Python эта функция реализована os.path.expanduser :

my_dir = os.path.expanduser("~/some_dir")
13 голосов
/ 13 января 2010

Это, вероятно, потому что Python не Bash и не следует тем же соглашениям. Вы можете использовать это:

homedir = os.path.expanduser('~')
0 голосов
/ 15 января 2019

Теперь вы можете сделать это как

from srbib import abs_path
my_dir = abs_path('~/path/to/dir')
if not os.path.exists(my_dir):
    os.makedirs(my_dir)

Пожалуйста, обратитесь к https://stackoverflow.com/a/54190233/6799074 для использования srblib.abs_path

0 голосов
/ 15 января 2019
from srblib import verify_folder

verify_folder('path/to/folder')

Он создаст папку, если ее там нет, иначе он не создаст папку.

ПРИМЕЧАНИЕ : он также создает папки в пути (если требуется)

srb@srb-pc:~/hello$ ls
srb@srb-pc:~/hello$ python3 
>>> from srblib import verify_folder
>>> verify_folder('~/hello/A/B')
>>> exit()
srb@srb-pc:~/hello$ ls
A
srb@srb-pc:~/hello$ ls A
B
srb@srb-pc:~/hello$ 

Эта функция работает как mkdir -p path/to/folder

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...