จะใช้“ /” (ตัวคั่นไดเรกทอรี) ใน Linux และ Windows ใน Python ได้อย่างไร


191

ฉันเขียนโค้ดในไพ ธ อนซึ่งใช้ / เพื่อสร้างไฟล์เฉพาะในโฟลเดอร์ถ้าฉันต้องการใช้รหัสใน windows มันจะไม่ทำงานมีวิธีที่ฉันสามารถใช้รหัสใน Windows และ Linux

ในหลามฉันใช้รหัสนี้:

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

เมื่อฉันจะใช้รหัสของฉันในกรณีที่เครื่อง windows รหัสของฉันจะไม่ทำงาน

ฉันจะใช้ "/" (ตัวคั่นไดเรกทอรี) ใน Linux และ Windows ได้อย่างไร


1
คุณสามารถกำหนดได้ในจุดเริ่มต้นขึ้นอยู่กับ Win / * ระวังแล้วทำงานกับตัวแปร
fedorqui 'ดังนั้นหยุดการทำร้าย'

12
ใน Windows คุณสามารถใช้ \ หรือ / เป็นตัวคั่นไดเรกทอรี
SecurityMatt

12
Windows รองรับ/ในเส้นทางไดเรกทอรี คุณกำลังมีปัญหาเฉพาะอะไร โพสต์รหัสที่แสดงถึงปัญหา
Michael Geary

หากคุณไม่ได้ใช้โปรแกรม Windows userspace การฟอร์เวิร์ดสแลชก็ใช้ได้เหมือนกัน คำสั่ง cmd บางคำสั่งมีปัญหาอย่างไรก็ตาม
Pihhan

1
@Mehrdad: คุณรู้ตัวอย่างที่ Win32 API ไม่ยอมรับ '/' หรือไม่? (ไม่นับ cmd.exe และโปรแกรมอื่น ๆ )
Eryk Sun

คำตอบ:


268

os.path.join()ใช้ ตัวอย่าง: os.path.join(pathfile,"output","log.txt").

ในรหัสของคุณที่จะ: rootTree.write(os.path.join(pathfile,"output","log.txt"))


9
os.path.joinใช้ตรรกะที่ซับซ้อนมากขึ้นเพื่อจับคู่ส่วนประกอบของพา ธ ที่สัมพันธ์กันเข้าด้วยกัน เมื่อคุณเพียงแค่ต้องการที่จะเชื่อมโยงพวกเขาos.sep.joinเป็นตัวเลือกที่เหมาะสม
Bachsau

108

ใช้:

import os
print os.sep

เพื่อดูว่าตัวแยกมีลักษณะอย่างไรบนระบบปฏิบัติการปัจจุบัน
ในรหัสของคุณคุณสามารถใช้:

import os
path = os.path.join('folder_name', 'file_name')


39

os.path.normpath(pathname)ควรพูดถึงเนื่องจากจะแปลง/ตัวคั่นพา ธ เป็น\ตัวคั่นบน Windows นอกจากนี้ยังทรุดอ้างอิง uplevel ซ้ำซ้อน ... เช่นA/BและA/foo/../Bและทั้งหมดกลายเป็นA/./B A/Bและถ้าคุณเป็นของ Windows A\Bทั้งหมดเหล่านี้จะกลายเป็น


3
นี่คือ IMO คำตอบที่ดีที่สุดสำหรับคำถามเนื่องจากเป็นประโยค "วิธีการใช้“ /” (ตัวคั่นไดเรกทอรี) ทั้งใน Linux และ Windows" และมันก็มีประโยชน์อย่างเด่นชัด - ฉันค่อนข้างจะทำos.path.normpath('a/b/c/d/file.ext')มากกว่าos.path.join('a','b','c','d','file.ext')เมื่อฉันต้องระบุเส้นทางที่ยาว
ukrutt

ฉันพบว่าคำตอบนี้มีประโยชน์มาก ฉันกำลังมองหาวิธีในการสร้างเส้นทางด้วยตัวคั่นที่สอดคล้องกัน ผู้โด่งดังos.path.joinเข้าร่วมทุกอย่างที่มีให้ เช่นjoin("a/b", "c\d")ให้a/b\c\d(บน windows) แต่ฉันจะได้รับผลที่คาดหวังกับการผสมผสานที่เหมาะสมของjoinและnormpathเช่นa\b\c\d(หน้าต่าง)
Sumudu

17

หากคุณโชคดีพอที่จะใช้งาน Python 3.4+ คุณสามารถใช้pathlib:

from pathlib import Path

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

หรือเทียบเท่า

path = Path(dir) / subdir / filename

16

ลิงค์ที่มีประโยชน์บางอย่างที่จะช่วยคุณ:


2
pathsep? โดยทั่วไปแล้วมีประโยชน์ แต่ไม่ใช่ที่นี่ IMO
glglgl

2
@glglgl แน่นอน ฉันมองหาsepแต่ไม่สามารถต้านทานตัวเองให้โพสต์สิ่งนี้ได้เช่นกัน (ฉันคิดว่า OP จะพบว่ามีประโยชน์สำหรับการทำงานในอนาคต) :)
Maroun



4

อย่าสร้างไดเรกทอรีและชื่อไฟล์ของคุณเองใช้ห้องสมุดที่รวมของงูใหญ่

ในกรณีนี้อย่างใดอย่างหนึ่งที่เกี่ยวข้องคือos.path เข้าร่วมโดยเฉพาะอย่างยิ่งซึ่งสร้างชื่อพา ธ ใหม่จากไดเรกทอรีและชื่อไฟล์หรือไดเรกทอรีและแยกที่ได้รับชื่อไฟล์จากเส้นทางแบบเต็ม

ตัวอย่างของคุณคือ

pathfile=os.path.dirname(templateFile)
p = os.path.join(pathfile, 'output')
p = os.path.join( p, 'log.txt')
rootTree.write(p)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.