Здравствуйте, как я мог заставить 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 работает но тогда я не могу добавить в файл
Итак, из того, что вы говорите, .read() читает только то, что находится под курсором, верно?






Вам нужно переместить курсор в начало файла, запись переместит его в конец:
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)?
Функция seek перемещает указатель (курсор, если вам нравится эта аналогия) на некоторое смещение в байтах, которое может быть абсолютным или относительным в зависимости от второго аргумента. seek(10) переместится на абсолютное смещение, т.е. на 10 байт от начала файла. Это связано с тем, что второй параметр по умолчанию равен нулю, что равно os.SEEK_SET. Вы не можете перейти к определенному номеру строки, если все строки не имеют одинаковой длины. В таком случае смещение может быть рассчитано как кратное длине линии.
Оператор with — это синтаксический сахар, который устраняет необходимость закрывать файл после его открытия. В Python содержимое того, что вы пытаетесь записать в файл, не сбрасывается на диск до тех пор, пока файл не будет закрыт (читайте здесь). Это означает, что в менеджере контекста (оператор with) файл все еще открыт, а его содержимое пусто. Вы можете снова открыть файл после его закрытия (после оператора with), чтобы прочитать содержимое, но это неэффективно. Если все, что вы пытаетесь сделать, это распечатать результат, попробуйте следующее:
join для добавления новых строк).
my_file.read()читает из текущего места в файле, которое является концом, поэтому читать больше нечего. Вам придется закрыть файл и снова открыть его или изменить местоположение файла с помощьюseek().