Диалог записи текста и сохранения

#python #tkinter

#питон #tkinter

Вопрос:

 from tkinter import * 
from tkinter import ttk 
from tkinter.filedialog import asksaveasfile 
  
root = Tk() 
root.geometry('200x150') 

Text = ['word','great','text']

def save(): 
    text_file = asksaveasfile(title="Select Location", filetypes=(("Text Files", "*.txt"),))

    with open(text_file, 'w') as f:
        f.write(Text)


btn = ttk.Button(root, text = 'Save', command = lambda : save()) 
btn.pack(side = TOP, pady = 20)
  
mainloop()
 

Ошибка типа: ожидаемый str, байты или ос.Объект, подобный пути, а не TextIOWrapper

У меня есть список под названием Text. Я хочу распечатать содержимое списка в текстовый файл. Что мне делать?

Комментарии:

1. Что не так с вашим кодом.

2. Ошибка типа: ожидаемый str, байты или ос. Объект, подобный пути, а не TextIOWrapper

3. Я не понимаю, как этот код может выдавать эту ошибку, если Text это список

4. f.write(«это текст») также не принимает это

5. В чем ошибка.

Ответ №1:

Это то, что работает для меня:

 lst = ['Hello Theren', 'How are yan', 'All good?n']

def save(): 
    text_file = asksaveasfile(title="Select Location", filetypes=(("Text Files", "*.txt"),))
     for line in lst:
         text_file.write(line) # Use str(line) if lst is of integers
 

Ошибка заключается в том, что asksaveasfile возвращает _io.TextIOWrapper объект, что означает то же самое, что и использование open(...) одного файла. То, что вы хотели asksaveasfilename() , это то, что вернет путь к объекту, затем:

 def save(): 
    text_file = asksaveasfilename(title="Select Location", filetypes=(("Text Files", "*.txt"),))
    with open(text_file, 'w') as f:     
        for line in lst:
            f.write(line) # Use str(line) if list of integers
 

Комментарии:

1. Он работает. Большое вам спасибо. Я благодарен вам.

2. текстовый файл. здесь будет работать write (строка), но если бы в списке были целые числа, это бы не сработало. текстовый файл. я думаю, что write(str (line)) является правильным.

3. @Rysicin Я предоставил строку списков, но да, int вам потребуется дополнительное приведение типов.