#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. Вроде того, но для меня он открывает файл в режиме добавления.