2015-04-28 5 views
1

Я искал, как получить абсолютный путь к файлу на python, но не имел большой удачи. Вот мой кодПолучить абсолютный путь к файлу в python

import os 


directory = raw_input("What's the directory? ") 
print "Reading files.." 
listing = os.listdir(directory) 
for fname in listing: 
    with open(fname) as f: 
     if "yes" in f.read(): 
      print f.name 
f.close() 

моя проблема это ... перечисление прекрасно .. но когда метод listdir передает переменную открытым способом, переменная проходит без абсолютного пути, поэтому он выиграл Не читайте файлы, потому что он читает файл, у которого нет пути. Вот пример ошибки

Что такое каталог?/home/diego/test Чтение файлов .. Traceback (последний последний звонок): Файл «/home/diego/Documents/progra/python/antivirus/antivirus.py», строка 14, в с открытым (fname) как f: IOError: [Errno 2] Нет такого файла или каталога: 'test'

Может ли кто-нибудь помочь мне с этим?

Благодаря

+1

возможно дубликат [Как получить абсолютный путь к файлу в Python] (http://stackoverflow.com/questions/51520/how- to-get-an-absolute-file-path-in-python) –

+2

Возможно, вам нужно добавить каталог в каждый 'fname', например' open (os.path.join (directory, fname)) ' – Marius

+0

Невозможно дублировать , дубликат точно. Используйте 'os.path.abspath (" mydir/myfile.txt ")' –

ответ

3

Ok, так что ваша проблема не получила ничего общего с абсолютными путями. Проблема в том, что вы пытаетесь открыть файл, который существует в другом каталоге, используя только его имя файла. Используйте os.path.join, чтобы создать полное имя файла и использовать это:

for fname in listing: 
    full_name = os.path.join(directory, fname) 
    with open(full_name) as f: 
     if "yes" in f.read(): 
      print f.name 
+0

файл существует в этом каталоге, я создал файл, но путь не передается через этот метод. [Элементарный] $ pwd /home/diego/test [Элементарный] $ ls test –

+0

Когда вы скажете python на 'open (fname)', он будет искать файл в каталоге, где вы запускаете свой скрипт, а не каталог, который вы ввели в подсказку. То есть вместо того, чтобы пытаться открыть '/ home/diego/test/test', он пытается открыть'/home/diego/Documents/progra/python/antivirus/test', потому что вы только сказали ему открыть «test» – Raniz

+0

. правы .. и как я могу использовать путь, читающий мою переменную «directory» –

0
from os.path import abspath 

full_path = abspath(filename) 
Смежные вопросы