Jalur Windows dengan Python

152

Apa cara terbaik untuk mewakili direktori Windows, misalnya "C:\meshes\as"? Saya telah mencoba untuk memodifikasi skrip tetapi tidak pernah berhasil karena sepertinya saya tidak bisa mendapatkan direktori dengan benar, saya berasumsi karena '\'akting sebagai karakter pelarian?

Gareth
sumber

Jawaban:

220

Anda dapat menggunakan selalu:

'C:/mydir'

ini berfungsi baik di linux dan windows. Kemungkinan lainnya adalah

'C:\\mydir'

jika Anda memiliki masalah dengan beberapa nama, Anda juga dapat mencoba literal string mentah:

r'C:\mydir'

namun praktik terbaiknya adalah menggunakan os.pathfungsi-fungsi modul yang selalu memilih konfigurasi yang benar untuk OS Anda:

os.path.join(mydir, myfile)

Dari python 3.4 Anda juga dapat menggunakan modul pathlib . Ini sama dengan di atas:

pathlib.Path(mydir, myfile)

atau

pathlib.Path(mydir) / myfile
joaquin
sumber
2
@ Gareth, saya sangat malas dan sering menemukan diri saya menggunakan '/'. Namun dalam jangka panjang penggunaan os.path lebih nyaman. Ini juga memungkinkan Anda untuk menggunakan mydir dan myfile sebagai variabel yang dapat Anda modifikasi dengan mudah.
joaquin
13
Satu-satunya hal untuk berhati-hati dengan string mentah adalah bahwa mereka tidak dapat diakhiri dengan \
Douglas Leeder
Anda dapat menggunakan os.path.join () untuk menghapus kebutuhan untuk mengakhiri jalur dengan \.
Will Ediger
1
Saya suka sintaks r (raw string). Berguna jika Anda menyalin jalur panjang di mana Anda biasanya harus mengganti semua garis miring terbalik dengan garis miring ke depan
peterb
string mentah dapat diakhiri dengan \\ sehingga kita dapat menggabungkan file ke path: codecs.open (r "C: \ maXbox \ EKON24 \ tweet_data \\" + file, 'r', enkode = 'utf-8') sebagai f:
Max Kleiner
20

Gunakan os.pathmodul.

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

Atau gunakan string mentah

r"C:\meshes\as"

Saya juga merekomendasikan tidak ada spasi di path atau nama file. Dan Anda bisa menggunakan backslash ganda di string Anda.

"C:\\meshes\\as.jpg"
S.Lott
sumber
11
os.path.join mungkin tidak berperilaku seperti yang Anda harapkan ketika komponen adalah huruf drive, karena jalur relatif diizinkan bahkan saat itu. (Hasil dari baris pertama adalah 'C: meshes \\ as' di Windows.)
dash-tom-bang
Komentar @ dash-tom-bang sangat penting. Apakah hal yang benar untuk dilakukan "C:\"sebagai entri pertama? Apakah itu mengacaukan kebersihan penggunaan join?
Jack O'Connor
1
@ JackO'Connor itulah yang saya lakukan. Anda tentu tidak ingin meletakkan "C:\"di tengah nama file. Selain itu, Anda dapat menggunakan os.path.normpathsebelum atau setelah bergabung, untuk memastikan jalur dicetak dengan baik.
Agostino
tetapi tidak berhasil juga. Yang berhasil adalahos.path.join( "C:\\", "meshes", "as" )
Jean-François Fabre
17

Ya, \dalam string Python literal menunjukkan awal dari urutan pelarian. Di jalur Anda, Anda memiliki urutan melarikan diri dua karakter yang valid \a, yang diciutkan menjadi satu karakter yaitu ASCII Bell :

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

Urutan pelarian umum lainnya termasuk \t(tab), \n(umpan baris), \r(carriage return):

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

Seperti yang Anda lihat, dalam semua contoh ini garis miring terbalik dan karakter berikutnya dalam literal dikelompokkan bersama untuk membentuk satu karakter dalam string terakhir. Daftar lengkap urutan pelarian Python ada di sini .

Ada berbagai cara untuk mengatasinya:

  1. Python tidak akan memproses urutan pelarian dalam string literal yang diawali dengan ratauR :

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
  2. Python di Windows juga harus menangani garis miring ke depan.

  3. Anda bisa menggunakan os.path.join...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
  4. ... atau modul yang lebih barupathlib

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')
kubah
sumber
-1

Gunakan PowerShell

Di Windows, Anda dapat menggunakan /path seperti Linux atau macOS di semua tempat selama Anda menggunakan PowerShell sebagai antarmuka baris perintah. Muncul pra-instal pada Windows dan mendukung banyak perintah Linux seperti lsperintah.

Jika Anda menggunakan Prompt Perintah Windows (yang muncul saat Anda mengetik cmddi Menu Start Windows), Anda perlu menentukan jalur dengan \tepat di dalamnya. Anda dapat menggunakan /jalur di semua tempat lain (editor kode, mode interaktif Python, dll.).

Ammar Alyousfi
sumber
-1

Jika Anda ingin menempelkan lintasan windows dari sumber lain (misalnya, File Explorer) - Anda dapat melakukannya melalui input()panggilan di konsol python:

>>> 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'

Kemudian salin hasilnya

EP
sumber