2008-11-25 95 views
3

我知道這是一個簡單的初學者Python問題,但我在使用相對路徑打開文件時遇到問題。這種行爲似乎很奇怪,我(從非Python的背景的):Python中的相對路徑問題

import os, sys 

titles_path = os.path.normpath("../downloads/movie_titles.txt") 

print "Current working directory is {0}".format(os.getcwd()) 
print "Titles path is {0}, exists? {1}".format(movie_titles_path, os.path.exists(movie_titles_path)) 

titlesFile = open(movie_titles_path, 'r') 
print titlesFile 

這導致:

C:\Users\Matt\Downloads\blah>testscript.py 

Current working directory is C:\Users\Matt\Downloads\blah 
Titles path is ..\downloads\movie_titles.txt, exists? False 

Traceback (most recent call last): 
    File "C:\Users\Matt\Downloads\blah\testscript.py", line 27, in <module> 
    titlesFile = open(titles_path, 'r') 
IOError: [Errno 2] No such file or directory: '..\\downloads\\movie_titles.txt' 

然而,dir命令顯示在相對路徑此文件存在:

C:\Users\Matt\Downloads\blah>dir /b ..\downloads\movie_titles.txt 
movie_titles.txt 

Python是如何解釋Windows上的相對路徑的?用相對路徑打開文件的正確方法是什麼?

此外,如果我換在os.path.abspath()我的道路,然後我得到這樣的輸出:

Current working directory is C:\Users\Matt\Downloads\blah 
Titles path is C:\Users\Matt\Downloads\downloads\movie_titles.txt, exists? False 
Traceback (most recent call last): 
    File "C:\Users\Matt\Downloads\blah\testscript.py", line 27, in <module> 
    titlesFile = open(titles_path, 'r') 
IOError: [Errno 2] No such file or directory: 'C:\\Users\\Matt\\Downloads\\downloads\\movie_titles.txt' 

在這種情況下,似乎是open()命令自動轉義字符\

**令人尷尬的最終更新:看起來像我揉了一個字符在Windows中正確的方式做到這一點在Windows上似乎是使用os.path.normpath(),正如我原來的。

+0

的行爲什麼?我們也需要輸出。 – Patrick 2008-11-25 21:59:16

+0

我太早提交了意外,問題現在已修復。 – 2008-11-25 22:02:07

回答

3

normpath只返回該特定路徑的標準化版本。它實際上並不爲解決的工作路徑。你可能想要做os.path.abspath(yourpath)

另外,我假設你在IronPython上。否則,表達該字符串格式的標準方法是:

"Current working directory is %s" % os.getcwd() 
"Titles path is %s, exists? %s" % (movie_titles_path, os.path.exists(movie_titles_path)) 

(對不起,這只是一個問題的一半貼出的問題我很疑惑的完全解決方案)