2016-02-05 7 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 (\ _ \ _ файл \ _ \ _))] (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

Файловые объекты реализованы с использованием пакета STDIO Кассиопеяне

https://docs.python.org/2/library/functions.html#open От

Первые два аргумента такие же, как для FOPEN STDIO в(): имя это имя файла будет открыт

Таким образом, это отвечает глядя на документацию для 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 

Но если I 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 попытается открыть файл в текущем рабочем каталоге, из которого была запущена программа.