Python3 Как я могу читать и писать, используя With

Здравствуйте, как я мог заставить Python писать и читать одновременно, используя (с) я сделал эту простую функцию, чтобы добавить имена в txt-файл, но вывод обычно пуст...

def student():
    with open("students.txt","w+") as my_file:
        for i in range(20):
            user = input("Enter your name : ")
            my_file.write(f"{user}\n")
        print(my_file.read())

student()

пробовал r+ w+ a+ но ни один из них не работал только r работает но тогда я не могу добавить в файл

my_file.read() читает из текущего места в файле, которое является концом, поэтому читать больше нечего. Вам придется закрыть файл и снова открыть его или изменить местоположение файла с помощью seek().
John Gordon 12.06.2023 17:12

Итак, из того, что вы говорите, .read() читает только то, что находится под курсором, верно?

momoshki 12.06.2023 17:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно переместить курсор в начало файла, запись переместит его в конец:

def student():
    with open("students.txt", "w+") as my_file:
        for i in range(20):
            user = input("Enter your name : ")
            my_file.write(f"{user}\n")

        my_file.seek(0)  # reposition cursor to start of file
        print(my_file.read())

student()

так что my_file.read() читает только ниже курсора? + что, если я хочу прочитать строку 10 и ниже, мне сделать my_file.seek(10)?

momoshki 12.06.2023 17:44

Функция seek перемещает указатель (курсор, если вам нравится эта аналогия) на некоторое смещение в байтах, которое может быть абсолютным или относительным в зависимости от второго аргумента. seek(10) переместится на абсолютное смещение, т.е. на 10 байт от начала файла. Это связано с тем, что второй параметр по умолчанию равен нулю, что равно os.SEEK_SET. Вы не можете перейти к определенному номеру строки, если все строки не имеют одинаковой длины. В таком случае смещение может быть рассчитано как кратное длине линии.

DarkKnight 12.06.2023 18:02

Оператор with — это синтаксический сахар, который устраняет необходимость закрывать файл после его открытия. В Python содержимое того, что вы пытаетесь записать в файл, не сбрасывается на диск до тех пор, пока файл не будет закрыт (читайте здесь). Это означает, что в менеджере контекста (оператор with) файл все еще открыт, а его содержимое пусто. Вы можете снова открыть файл после его закрытия (после оператора with), чтобы прочитать содержимое, но это неэффективно. Если все, что вы пытаетесь сделать, это распечатать результат, попробуйте следующее:

  1. Создайте список имен в цикле for (не записывайте здесь в файл).
  2. Запишите список имен целиком в файл (используя join для добавления новых строк).
  3. Распечатать список имен.

Другие вопросы по теме