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.