Python'da Windows yolu


152

Örneğin, bir Windows dizinini temsil etmenin en iyi yolu nedir "C:\meshes\as"? Ben bir komut dosyasını değiştirmek için çalışıyoruz ama asla dizini doğru almak gibi olamaz, çünkü '\'kaçış karakter olarak hareket varsayalım işe yaramaz ?

Yanıtlar:


220

her zaman kullanabilirsiniz:

'C:/mydir'

bu hem linux hem de pencerelerde çalışır. Diğer olasılıklar

'C:\\mydir'

bazı isimlerle sorun yaşıyorsanız, ham dize değişmezlerini de deneyebilirsiniz:

r'C:\mydir'

ancak en iyi uygulama, os.pathişletim sisteminiz için her zaman doğru yapılandırmayı seçen modül işlevlerini kullanmaktır :

os.path.join(mydir, myfile)

Python 3.4'ten pathlib modülünü de kullanabilirsiniz . Bu yukarıdakilere eşittir:

pathlib.Path(mydir, myfile)

veya

pathlib.Path(mydir) / myfile

2
@Gareth, çok tembelim ve sık sık kendimi '/' kullanarak buldum. Ancak uzun vadede os.path kullanımı daha uygundur. Ayrıca kolayca değiştirebileceğiniz değişkenler olarak mydir ve myfile kullanmanıza izin verir.
joaquin

13
Ham dizelerde dikkatli olmak için tek şey \ ile
bitirememeleri

\ İle yolların sonlandırılması gereğini kaldırmak için os.path.join () yöntemini kullanabilirsiniz.
Ediger

1
Ben r (ham dize) sözdizimini seviyorum. Genellikle tüm ters eğik çizgileri eğik çizgi ile değiştirmek zorunda kalacağınız uzun bir yolu kopyalıyorsanız yararlıdır
peterb

raw string \\ ile bitebilir, böylece bir dosyayı yola birleştirebiliriz: codecs.open (r "C: \ maXbox \ EKON24 \ tweet_data \\" + dosya, 'r', encoding = 'utf-8') olarak f:
Max Kleiner

20

os.pathModülü kullanın .

os.path.join( "C:", "meshes", "as" )

Veya ham dizeler kullanın

r"C:\meshes\as"

Ayrıca yol veya dosya adlarında boşluk önermem. Ve dizelerinizde çift ters eğik çizgi kullanabilirsiniz.

"C:\\meshes\\as.jpg"

11
os.path.join, bir bileşen bir sürücü harfi olduğunda beklediğiniz gibi davranmayabilir, çünkü o zamana kadar göreli yollara izin verilir. (İlk satırın sonucu Windows'ta 'C: mesh \\ as' şeklindedir.)
dash-tom-bang

@ dash-tom-bang'in yorumu gerçekten önemlidir. "C:\"İlk giriş olarak koymak için yapılacak doğru şey midir? Bu, kullanımın temizliğini biraz bozuyor joinmu?
Jack O'Connor

1
@ JackO'Connor benim yaptığım bu. Kesinlikle "C:\"dosya adının ortasına koymak istemezsiniz . Ayrıca, os.path.normpathyolun iyi yazdırıldığından emin olmak için birleştirme işleminden önce veya sonra kullanabilirsiniz .
Agostino

ama o da çalışmıyor. Ne işleri olduğunuos.path.join( "C:\\", "meshes", "as" )
Jean-François Fabre

17

Evet, \Python string değişmezlerinde bir kaçış dizisinin başlangıcını belirtir. Yolunuzda , ASCII Bell olan bir karaktere \adaraltılmış geçerli bir iki karakterli kaçış diziniz var :

>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess

Diğer yaygın kaçış dizileri \t(sekme), \n(satır besleme), \r(satır başı):

>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']

Gördüğünüz gibi, tüm bu örneklerde, ters eğik çizgi ve değişmezdeki bir sonraki karakter, son dizede tek bir karakter oluşturmak için birlikte gruplandırıldı. Python'un kaçış dizilerinin tam listesi burada .

Bununla başa çıkmanın çeşitli yolları vardır:

  1. Python, rveya ile başlayan dize değişmezlerinde kaçış dizilerini işlemezR :

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
  2. Windows'daki Python, eğik çizgileri de ele almalıdır.

  3. Kullanabilirsin os.path.join...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
  4. ... veya daha yeni pathlibmodül

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')

-1

PowerShell kullanın

Windows'da, komut satırı arabiriminiz olarak PowerShell kullandığınız sürece/ yolunuzda Linux veya macOS gibi her yerde kullanabilirsiniz . Windows'a önceden yüklenmiş olarak gelir ve komut gibi birçok Linux komutunu destekler ls.

Windows Komut İstemi'ni ( cmdWindows Başlat Menüsüne yazdığınızda görünen ) kullanırsanız, \hemen içinde bulunan yolları belirtmeniz gerekir. Sen kullanabilirsiniz /tüm diğer yerlerde yolları (kod editörü, Python etkileşimli mod, vs.).


-1

Windows yolunu başka bir kaynaktan (örneğin, Dosya Gezgini) yapıştırmak istiyorsanız - bunu input()python konsolundaki çağrı ile yapabilirsiniz :

>>> input()
D:\EP\stuff\1111\this_is_a_long_path\you_dont_want\to_type\or_edit_by_hand
'D:\\EP\\stuff\\1111\\this_is_a_long_path\\you_dont_want\\to_type\\or_edit_by_hand'

Sonra sonucu kopyalayın

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.