Код ошибки при попытке записи в текстовый файл - PullRequest
0 голосов
/ 27 апреля 2019

По сути, я запустил Python пару дней назад и хотел создать программу, которая могла бы читать и записывать файлы.Проблема в том, что я получаю эту ошибку: io.UnsupportedOperation: недоступно для записи

choice = input("Open / Create file: ")
if choice == 'Create' or choice == 'create':
    new_file_name = input("Create a name for the file: ")
    print(open(new_file_name, "w"))
    text = input("Type to write to file: \n")
    file2 = open(new_file_name)
    print(file2.write(text))
    print("Reading file...")
    print(open(new_file_name, "r"))
    print(file2.read())
elif choice == 'Open' or choice == 'open':
    filename = input("File name or directory: ")
    file = open(filename)
    open(filename, "r")
    time.sleep(1)
    print("Reading file...")
    time.sleep(1)
    print(file.read())
    choice2 = input("Write to file? Y/N \n")
    if choice2 == 'Y' or choice2 == 'y':
        text2 = input("Type to write to file: ")
        open(filename, "w")
        file = open(filename)
        file.write(text2)
        choice3 = input("Read file? Y/N ")
        if choice3 == 'Y' or choice3 == 'y':
            print(file.read())

1 Ответ

1 голос
/ 27 апреля 2019

Ваша идея создания отчетов о прогрессе из вашего кода хороша, особенно на начальных этапах.Но, похоже, вы не совсем понимаете разницу между

print(open(new_file_name, "w"))

, что на самом деле делает ваш код, и

print(f'open("{new_file_name}", "w")')

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

open("myfile.txt", "w")

, но ваш реальный код делает (1) создание объекта открытого файла для записи, затем (2) выводит его тип и место в памяти на экран и, наконец, (3) выбросить .

Итак, первое исправление - это отменить вызовы print() или, по крайней мере, уменьшить их до print("step 1") и т. Д., Пока вы не поймете, как это сделать правильно.,

Второе исправление - не отвечать на выбор команды «Создать», пытаясь прочитать файл.Если пользователь создает файл, он явно не заинтересован в содержимом предыдущей версии.Ваш код отвечает на чтением файла, и это мне кажется задом наперед, и в целом программы должны работать так, как обычный пользователь, например я, будет думать интуитивно.Вот правильный способ сделать бит создания:

choice = input("Open / Create file: ")
if choice == 'Create' or choice == 'create':
    new_file_name = input("Create a name for the file: ")
    with open(new_file_name, "w") as file2:
        file2.write("This is stuff to go into the created file.\n")
else:
    ...

. Он запрашивает имя файла, открывает его для записи и затем записывает в него некоторые данные.

...