Bagaimana cara menggunakan "/" (pemisah direktori) di Linux dan Windows dengan Python?

191

Saya telah menulis kode dengan python yang menggunakan / untuk membuat file tertentu di folder, jika saya ingin menggunakan kode di windows tidak akan berfungsi, apakah ada cara di mana saya dapat menggunakan kode di Windows dan Linux.

Dalam python saya menggunakan kode ini:

pathfile=os.path.dirname(templateFile)
rootTree.write(''+pathfile+'/output/log.txt')

Ketika saya akan menggunakan kode saya di mesin windows misalkan kode saya tidak akan berfungsi.

Bagaimana cara menggunakan "/" (pemisah direktori) di Linux dan Windows?

hulk007
sumber
1
Anda dapat mendefinisikannya di awal tergantung pada Win / * nix dan kemudian bekerja dengan variabel.
fedorqui 'SO berhenti merugikan'
12
Di Windows Anda dapat menggunakan \ atau / sebagai pemisah direktori.
SecurityMatt
12
Dukungan Windows /di jalur direktori. Apa masalah spesifik yang Anda alami? Posting beberapa kode yang menggambarkan masalah.
Michael Geary
Kecuali Anda bergantung pada program userspace Windows, forward slash berfungsi dan mundur. Namun beberapa perintah cmd bermasalah dengan itu.
Pihhan
1
@Mehrdad: Apakah Anda tahu contoh di mana Win32 API tidak menerima '/'? (tidak termasuk cmd.exe dan program lainnya)
Eryk Sun

Jawaban:

268

Gunakan os.path.join(). Contoh: os.path.join(pathfile,"output","log.txt").

Dalam kode Anda itu adalah: rootTree.write(os.path.join(pathfile,"output","log.txt"))

Razvan Serbia
sumber
9
os.path.joinmenggunakan logika yang lebih kompleks untuk mencocokkan beberapa komponen jalur relatif bersama. Ketika Anda hanya ingin rantai mereka, os.sep.joinadalah pilihan yang tepat.
Bachsau
108

Menggunakan:

import os
print os.sep

untuk melihat bagaimana pemisah terlihat pada OS saat ini.
Dalam kode Anda, Anda dapat menggunakan:

import os
path = os.path.join('folder_name', 'file_name')
Alexander Kononenko
sumber
62

Anda dapat menggunakan os.sep :

>>> import os
>>> os.sep
'/'
Adem Öztaş
sumber
39

os.path.normpath(pathname)juga harus disebutkan karena mengubah /pemisah jalur menjadi \pemisah pada Windows. Ini juga runtuh referensi tingkat tinggi yang berlebihan ... yaitu, A/Bdan A/foo/../Bdan A/./Bsemua menjadi A/B. Dan jika Anda Windows, ini semua menjadi A\B.

Jon Rosen
sumber
3
Ini adalah IMO jawaban terbaik untuk pertanyaan seperti yang diungkapkan, "bagaimana menggunakan" / "(pemisah direktori) di Linux dan Windows". Dan itu juga sangat berguna - saya lebih suka melakukannya os.path.normpath('a/b/c/d/file.ext')daripada os.path.join('a','b','c','d','file.ext')ketika saya harus menentukan jalan yang panjang.
ukrutt
Saya juga menemukan jawaban ini sangat membantu. Saya mencari metode untuk menghasilkan jalur dengan pemisah yang konsisten. Yang terkenal os.path.joinhanya bergabung dengan apa saja yang disediakan. misalnya join("a/b", "c\d")memberi a/b\c\d(di windows). Tetapi saya bisa mendapatkan hasil yang diharapkan dengan kombinasi yang tepat dari joindan normpath, misalnya a\b\c\d(pada windows)
Sumudu
17

Jika Anda cukup beruntung menjalankan Python 3.4+, Anda dapat menggunakan pathlib:

from pathlib import Path

path = Path(dir, subdir, filename)  # returns a path of the system's path flavour

atau, secara setara,

path = Path(dir) / subdir / filename
Eugene Yarmash
sumber
16

Beberapa tautan bermanfaat yang akan membantu Anda:

Maroun
sumber
2
pathsep? Umumnya bermanfaat, tetapi tidak di sini, IMO.
glglgl
2
@glglgl Memang. Saya mencari septetapi tidak bisa menahan diri untuk memposting ini juga (saya berasumsi OP akan menemukannya berguna untuk pekerjaan di masa depan) :)
Maroun
11

Lakukan import osdan gunakanos.sep

JackPoint
sumber
8

Anda dapat menggunakan " os.sep "

 import os
 pathfile=os.path.dirname(templateFile)
 directory = str(pathfile)+os.sep+'output'+os.sep+'log.txt'
 rootTree.write(directory)
P113305A009D8M
sumber
4

Jangan membangun direktori dan nama file diri Anda, gunakan pustaka python termasuk.

Dalam hal ini yang relevan adalah os.path . Terutama bergabung yang membuat nama path baru dari direktori dan nama file atau direktori dan split yang mendapatkan nama file dari path lengkap.

Teladan Anda akan menjadi

pathfile=os.path.dirname(templateFile)
p = os.path.join(pathfile, 'output')
p = os.path.join( p, 'log.txt')
rootTree.write(p)
mmmmmm
sumber