2011-07-11 88 views
5

我是Python的新手,所以我可能會對此完全錯誤,但我遇到問題並且更改爲文件的目錄。我的腳本需要多個文件名,可以在任何目錄中。在我的腳本中,我需要Python來切換到文件的目錄,然後執行一些操作。但是,我在更改目錄時遇到問題。格式化文件路徑

這是我到目前爲止已經試過:

path=os.path.split(<file path>) 
os.chdir(path[0]) 
<Do things to file specified by path[1]> 

我已經得到的文件路徑的方法是從瀏覽器中拖拽到命令行。這將輸入路徑名稱,如"C:\foo\bar\file_name.txt"。當我在解釋器中運行第一行時,我得到了('C:\\foo\bar','file_name.txt')。問題是由於某種原因,最後一個反斜槓不會自動轉義,所以當我運行os.chdir(path[0])時,我會收到錯誤信息。

我的問題是爲什麼最後一個反斜槓不會像其他的一樣自動轉義?我如何手動轉義最後一個反斜槓?有沒有更好的方式來獲取文件的目錄並更改它?

+0

這是有點不尋常的(雖然並不總是錯誤的)從python shell以在命令提示符下運行的東西。 「執行某些操作」到底是什麼?也許他們可以直接在Python中完成。 – Gerrat

+0

我不認爲rhololkeolke正在退出Python shell;正如我最近注意到的那樣,您仍然可以將文件拖到控制檯窗口中,以便在shell內部獲取路徑。當然,即使你不得不在shell之外做一些事情,如果它只是一個動作,你也可以使用'os.system()'。即使它是多個操作,如果它經常重複,也可以編寫批處理文件並使用'os.system()'調用它。當然,這與rhololkeolke提出的問題無關。 – JAB

回答

5

最後一個反斜槓沒有被自動轉義,因爲當下面的字符沒有形成帶反斜槓的轉義序列時,Python只能在常規字符串中轉義反斜槓。實際上,在你的例子中,你不會從'C:\foo\bar'得到'C:\\foo\bar',你會得到'C:\x0coo\x08ar'

你想要做的是或者用正斜槓替換反斜槓,或者爲了簡化拖放操作,只需在路徑前加上r,這樣它就是一個原始字符串,並且不能識別轉義序列。

>>> os.path.split(r"C:\foo\bar\file_name.txt") 
('C:\\foo\\bar','file_name.txt') 
+0

謝謝。現在完美工作。 – rhololkeolke

+0

不客氣。 – JAB

2

您正在使用正確的模塊和方法。只是當你把那個窗口路徑在那裏,使字符串原始的字符串,所以你的命令應該是:

path=os.path.split(r'C:\foo\bar\file_name.txt') 

注意r在第一次報價的前面,這使得Python中不能治療反斜槓在字符串中作爲轉義序列。