2013-08-18 2 views
0

У меня есть простой вопрос о манипуляции с файловой строкой.Как получить имя файла из объекта strem записи

Я написал немного кода, который, наконец, работает иначе, чем для окончательного сообщения. Ради объяснений, пожалуйста, ознакомьтесь с упрощенной версией моего кода ниже.

outStream = "/Users/andreamoro/Desktop/domains_output.csv" 

try: 
    outStream = open(outStream, "w") 
    ... 
    do something 
except: 
    .... 
else: 
    print "A new output file %s has been created." %os.path.basename(outStream) 

мой желаемый результат должен быть только имя файла ... вместо этого я получаю исключение, как этот

Файл «/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ posixpath.py», строка 121, в я базовое имя = p.rfind ('/') + 1 AttributeError: 'файл' объект не имеет атрибута 'RFIND'

Я, конечно, используя неправильный метод, и Я не могу ожидать, чтобы тип файла был введен в строку. Я удивлен, что нет способа вернуть только имя файла, и если оно существует, я не смог его найти.

Не могли бы вы указать правильное направление?

Благодаря

ответ

0

outStream переменная переназначен и становится файл-подобный объект:

outStream = open(outStream, "w") 

Теперь вы можете получить имя файла из outStream.name:

name

If the file object was created using open(), the name of the file. Otherwise, some string that indicates the source of the file object, of the form "<...>". This is a read-only attribute and may not be present on all file-like objects. (docs)

os.path.basename(outStream.name) # is equal to 'domains_output.csv' 
1

Проблемы в коде является то, что вы вновь назначенным outStream к файловому объекту.

outStream = "/Users/andreamoro/Desktop/domains_output.csv" 

try: 
    outStream = open(outStream, "w") # now outStream is this 

Переименуйте либо строковый объект, либо файл, и ваш код будет работать нормально.

В противном случае он работает отлично:

>>> strs = "/Users/andreamoro/Desktop/domains_output.csv" 
>>> os.path.basename(strs) 
'domains_output.csv'