Python'un os.makedirs benim yolumda “~” anlamıyor


159

Yollarımda ~ küçük bir sorunum var.

Bu kod örneği "~ / some_dir" adlı bazı dizinler oluşturur ve ana dizinimde some_dir oluşturmak istediğimi anlamıyorum.

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

Bunun Linux tabanlı bir sistemde olduğunu unutmayın.

Yanıtlar:


277

Yaklaşık işareti manuel olarak genişletmeniz gerekir:

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

1
Bu yüzden os.path.expanduser kullanmadım ve OP'nin yaptıklarını yaptım ve python şu anki dizinimde "~" dizini yarattı. Bu dizini nasıl silebilirim (asıl giriş dizinini kaldırmadan)?
Mutlu Mittal

1
Diğerleri merak için @HappyMittal, sadece ./geçerli dizine ./~başvurmak ve böylece ~geçerli dizindeki klasörü kaldırmak için kullanabilirsiniz . Daha güvenli olması için, sadece tam yolu sağlamak için en kolay: rm -rf path/to/bad/dir/~.
alkasm

Veya sadece bir ters eğik çizgi ile kaçmak:rm \~
DDMC

71

Dönüşümü ~/some_diriçin $HOME/some_dirdenir genişleme tilde ve ortak bir kullanıcı arayüzü özelliğidir. Dosya sistemi bu konuda hiçbir şey bilmiyor.

Python'da bu özellik os.path.expanduser tarafından uygulanır :

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

Gerçekten de, adlandırılmış bir dosyaya veya dizine sahip olmak kesinlikle geçerlidir ~. Yani kabuk ev kısayolu belirsiz ve en iyi kaçınılması.
bobince

7
Tilde genişletmesi gerçekleşse bile "./~" gösterimini kullanarak geçerli dizindeki "~" adlı bir dosyaya / dizine erişebilir. Bu, ~ genişlemesi yalnızca bir dosya adının başlangıcında gerçekleştiği için çalışır. Ayrıca, "-" ile başlayan dosya adları veya komut satırı arabirimleri tarafından özel olarak ele alınan diğer karakterler için de uygun bir saldırıdır. Muhtemelen çok fazla kabuk komut dosyası korsanlığı yaptığımı söyleyebilirim.
ddaa

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

15

Muhtemelen Python'un Bash olmaması ve aynı kuralları izlememesi. Bunu kullanabilirsiniz:

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

0
from srblib import verify_folder

verify_folder('path/to/folder')

Başka bir klasör oluşturmazsa bir klasör oluşturur.

NOT : ayrıca yolda klasörler oluşturur (gerekirse)

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$ 

Bu işlev şöyle çalışır mkdir -p path/to/folder


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.