Функция read () Python возвращает пустую строку

Если я наберу это в Python:

open("file","r").read() 

иногда он возвращает точное содержимое файла в виде строки, а в других случаях возвращает пустую строку (даже если файл не пуст). Может кто-нибудь объяснить, от чего это зависит?

Когда вы достигаете конца файла (EOF), метод .read возвращает '' , поскольку больше нет данных для чтения.

 >>> f = open('my_file.txt') >>> f.read() # you read the entire file 'My File has data.' >>> f.read() # you've reached the end of the file '' >>> f.tell() # give my current position at file 17 >>> f.seek(0) # Go back to the starting position >>> f.read() # and read the file again 'My File has data.' 

Ссылки Doc: read() tell() seek()

Примечание. Если это происходит в первый раз, когда вы читаете файл, убедитесь, что файл не пуст. Если это не попытка поставить file.seek(0) перед read .

Из документации метода file.read() :

Пустая строка возвращается, когда EOF встречается немедленно.

Вы попали в конец файлового объекта, больше нет данных для чтения. Файлы сохраняют «текущую позицию», указатель на данные файла, который начинается с 0 и увеличивается при чтении dada.

См. file.tell() для чтения этой позиции и метод file.seek() для его изменения.

Есть еще одна проблема, и это значит, что сам файл может быть просочился, и только последний или даже никогда не был убран сборщиком мусора. Поэтому используйте оператор with:

 with open(...) as file: data = file.read() 

Это трудно усвоить для любого, у кого есть C-ish background (C, C ++, Java, C # и, возможно, другие), поскольку в отступе всегда создается новая область, и любые переменные, объявленные в этой области, недоступны для наружного. В Python это просто не так, но сначала вы должны привыкнуть к этому стилю …