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.