2015-02-06 3 views
3

Я пишу сценарий для автоматизации изменения определенного набора текста в одном файле в конкретный набор в другом с другим именем.Получить путь к файлу из функции askopenfilename в Tkinter

Я хочу, чтобы получить имя файла с помощью функции askopenfilename, но когда я пытаюсь напечатать имя файла, он возвращает:

<_io.TextIOWrapper name='/home/rest/of/file/path/that/I/actually/need.txt' mode='w' encoding='ANSI_X3.4-1968'>

Мне нужно только имя файла, потому что <_io.TextIOWrapper ...> является не подписали.

Любые предложения по удалению посторонних битов?

ответ

6

askopenfilename() возвращает путь к выбранному файлу или пустую строку, если не выбрано ни одного файла:

from tkinter import filedialog as fd 

filename = fd.askopenfilename() 
print(len(filename)) 

Чтобы открыть выбранный файл с askopenfilename, вы можете просто использовать обычные конструкции и функции Python, такие как open функция:

if filename: 
    with open(filename) as file: 
     return file.read() 

Я думаю, что вы используете askopenfile, который открывает выбранный файл и возвращает объект _io.TextIOWrapper или None если вы нажмете т he отмена кнопка.

Если вы хотите придерживаться askopenfile, чтобы получить файл путь к файлу просто открыто, вы можете просто получить доступ к свойству name из _io.TextIOWrapper объекта, возвращенный:

file = fd.askopenfile() 
if file: 
    print(file.name) 

Если вы хотите узнать больше о все функции, определенные в модуле filedialog (или tkFileDialog для Python 2), вы можете прочитать this article.

Смежные вопросы