Проблемы с записью файлов

#python #file #tkinter

#python #файл #tkinter

Вопрос:

Недавно я работал над проектом, в котором используется функция asksaveasfile() . После использования этого и изменения / ‘s на ‘s я продолжал получать сообщение об ошибке, по сути, сообщающее мне, что при использовании replace('/', '\') (поскольку — это Escape-символ, вам нужно 2) программа использовала \ вместо .

Вот созданный мной пример, в котором я получаю ту же ошибку:

 import tkinter
from tkinter.filedialog import asksaveasfile

files = [('Python Files', '*.py')]
get_file = asksaveasfile(filetypes = files, defaultextension = files)
get_file = str(get_file).replace('/', '\')
file = open(str(get_file), "w")

mainloop()
  

И вот ошибка, которую я получаю:

 Traceback (most recent call last):
  File "C:/Users/aries/Documents/saveas.py", line 30, in <module>
    file = open(str(get_file), "w")
OSError: [Errno 22] Invalid argument: "<_io.TextIOWrapper 
name='C:\Users\MY_NAME\Documents\MY_PROJECT\test23.py' mode='w' encoding='cp1252'>"
  

Любая помощь приветствуется.

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

1. В Windows Python автоматически обрабатывает / разделители в путях, поэтому вам даже не нужен этот код.

2. Вам никогда не придется менять обратную косую черту на прямую. Windows поддерживает обратную косую черту в течение очень долгого времени.

Ответ №1:

Проблема, с которой вы столкнулись, не связана с обратными косыми чертами. asksaveasfile() возвращает дескриптор открытого файла, а не имя файла. Если вам нужно имя файла, позвоните asksaveasfilename() — но почему?

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

1. Изначально я сделал 1, но поскольку он ответил в течение 10 минут, мне пришлось подождать, прежде чем принять. Пожалуйста, уделите больше внимания, прежде чем комментировать подобным образом.

2. @AriesNinja с askopenfile(..) я полагаю, что вы также можете избавиться от open(...) , он открывает файл, который вы выбираете с помощью filedialog

3. Вроде того, но для меня он открывает файл в режиме добавления.