2016-02-05 63 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将尝试在当前工作目录中打开该文件,该目录是程序的运行目录。