파이썬의 os.makedirs가 내 경로에서“~”를 이해하지 못합니다.


159

나는 ~에 약간의 문제가 있습니다.

이 코드 예제는 "~ / some_dir"이라는 일부 디렉토리를 작성하며 홈 디렉토리에 some_dir을 작성하려고한다는 것을 이해하지 못합니다.

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

이것은 Linux 기반 시스템에 있습니다.

답변:


277

물결표를 수동으로 확장해야합니다.

my_dir = os.path.expanduser('~/some_dir')

1
그래서 os.path.expanduser를 사용하지 않았고 OP가 한 일을했고 파이썬은 현재 디렉토리에 "~"디렉토리를 만들었습니다. 실제 홈 디렉토리를 제거하지 않고 해당 디렉토리를 어떻게 삭제합니까?
행복한 Mittal

1
다른 사람들이 궁금해하는 @HappyMittal은 단순히 ./현재 디렉토리를 참조하여 현재 디렉토리 ./~에서 폴더를 제거하는 데 사용할 수 있습니다 ~. 더 안전하려면 간단히 전체 경로를 제공하는 것이 가장 쉽습니다 rm -rf path/to/bad/dir/~.
alkasm

또는 백 슬래시로 이스케이프 처리하십시오.rm \~
DDMC

71

로 변환하는 ~/some_dir것을 물결 확장$HOME/some_dir 이라고 하며 일반적인 사용자 인터페이스 기능입니다. 파일 시스템은 그것에 대해 아무것도 모릅니다.

파이썬에서이 기능은 os.path.expanduser에 의해 구현됩니다 :

my_dir = os.path.expanduser("~/some_dir")

실제로, 파일 이름 또는 디렉토리를 갖는 것이 완벽하게 유효합니다 ~. 따라서 쉘 홈 단축키는 모호하며 가능하면 피하는 것이 가장 좋습니다.
bobince

7
"./~"표기법을 사용하여 물결표 확장이 발생하는 경우에도 현재 디렉토리에서 "~"라는 파일 / 디렉토리에 액세스 할 수 있습니다. ~ 확장은 파일 이름의 시작 부분에서만 발생하기 때문에 작동합니다. 또한 "-"로 시작하는 파일 이름이나 명령 줄 인터페이스에서 특별히 처리되는 다른 문자를 편리하게 해킹 할 수 있습니다. 쉘 스크립트 해킹을 너무 많이했음을 알 수 있습니다.
ddaa

The file system does not know anything about it.+1
Bin

15

아마도 파이썬은 배쉬가 아니며 같은 규칙을 따르지 않기 때문일 것입니다. 이것을 사용할 수 있습니다 :

homedir = os.path.expanduser('~')

0
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


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.