2016-02-05 48 views
0

我發現,到proceess按文件名指定的文件,我需要做的本地相對文件名在Python中意味着什麼?

import os 
dir = os.path.dirname(__file__) 
filename = os.path.join(dir, '/relative/path/to/file/you/want') 

import os 
dir = os.getcwd() 
filename = os.path.join(dir, '/relative/path/to/file/you/want') 

但如果我這樣做

filename = 'myfile.txt' 

然後在那裏將尋找這個文件?

+0

http://stackoverflow.com/questions/918154/relative-paths-in-python可能會有所幫助,看看。 – whrrgarbl

+0

[os.getcwd()vs os.path.abspath(os.path.dirname(\ _ \ _ file \ _ \ _))]的可能重複(http://stackoverflow.com/questions/11274040/os-getcwd -vs-os-path-abspathos-path-dirname-file) –

+0

以「/」開頭的路徑不是相對路徑。 –

回答

0

簡答題:在當前工作目錄下。

龍答:

https://docs.python.org/2/library/stdtypes.html#bltin-file-objects

File對象使用C的STDIO包

實現從https://docs.python.org/2/library/functions.html#open

前兩個參數是相同的stdio的fopen()函數:name是要打開

所以文件名,這是通過查看文檔stdio回答:

http://www.cplusplus.com/reference/cstdio/fopen/

filename

C字符串,包含要打開的文件的名稱。

其值應遵循運行環境的文件名稱規範,並且可以包含路徑(如果系統支持)。

「運行環境的規格」意味着它會解釋它,就好像你在運行文件的路徑中輸入路徑一樣,cwd。

例如,如果我有位於~/Desktop/temp.py腳本來讀取:

f = open("log.txt", 'r') 
print "success opening" 
f.close() 

,我必須位於~/Desktop/log.txt文件,我得到下面的輸出:

~/Desktop $ python temp.py 
success opening 

但如果我cd ..並再試一次:

~ $ python ~/Desktop/temp.py 
Traceback (most recent call last): 
    File "/home/whrrgarbl/Desktop/temp.py", line 1, in <module> 
    f = open("log.txt", 'r') 
IOError: [Errno 2] No such file or directory: 'log.txt' 

只是爲了驗證:

~ $ touch log.txt 
~ $ python ~/Desktop/temp.py 
success opening 

所以你可以看到它正試圖打開它相對於我的,而不是在該腳本所在的目錄運行腳本的目錄。

0

創建一個簡單的python腳本(open.py)並用strace運行它。

腳本:

#!/usr/bin/env python 

with open('myfile.txt', 'r') as fd: 
    pass 

strace的命令:strace ./open.py

這表明我(只顯示相關部分):

read(3, "#!/usr/bin/env python\n\nwith ope"..., 4096) = 70 
read(3, "", 4096)      = 0 
brk(0x23a2000)       = 0x23a2000 
close(3)        = 0 
munmap(0x7f7f97dc3000, 4096)   = 0 
open("myfile.txt", O_RDONLY)   = -1 ENOENT (No such file or directory) 
write(2, "Traceback (most recent call last"..., 35Traceback (most recent call last): 
) = 35 
write(2, " File \"./open.py\", line 3, in <"..., 40 File "./open.py", line 3, in <module> 
) = 40 

望着open系統調用了路徑,因爲它在python腳本中提供。 open將嘗試在當前工作目錄中打開該文件,該目錄是程序的運行目錄。