python file.read () возвращает пустой [dубликат]

Я привел машину с дисплеем 4k (Dell inspiron 7548). Я получил его с окнами, полностью оснащенными сенсорным экраном. Но я чистая техника, и мое требование было либо ubuntu, либо centos. Итак, я пробовал ubuntu 16.04 и отлично работал с большинством функций.

Плюс точка:

Экран выглядит потрясающе с 4k дисплеем Сенсорный экран работает нормально, но не работает полностью.

Минус:

Экран выглядит потрясающе с дисплеем 4k Невозможно воспроизводить видео в полноэкранном режиме. Сенсорный экран работает нормально, но не работает полностью.
68
задан 14 January 2016 в 19:46

6 ответов

да, как указано выше ...

Я напишу только пример:

>>> a = open('file.txt')
>>> a.read()
#output
>>> a.seek(0)
>>> a.read()
#same output
16
ответ дан 15 August 2018 в 16:39

Каждый открытый файл имеет соответствующую позицию. Когда вы читаете (), вы читаете с этой позиции. Например, read(10) считывает первые 10 байт из вновь открытого файла, затем другой read(10) считывает следующие 10 байтов. read() без аргументов считывает все содержимое файла, оставляя позицию файла в конце файла. В следующий раз, когда вы вызываете read(), читать нечего.

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

2
ответ дан 15 August 2018 в 16:39

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

Что я буду add - это то, что в вашем конкретном случае вам не нужно искать назад или снова открывать файл, вы можете просто сохранить текст, который вы прочитали в локальной переменной, и использовать его дважды или столько раз, сколько вам нравится в вашей программе:

f = f.open()
text = f.read() # read the file into a local variable
# get the year
match = re.search(r'Popularity in (\d+)', text)
if match:
  print match.group(1)
# get all the names
matches = re.findall(r'<td>(\d+)</td><td>(\w+)</td><td>(\w+)</td>', text)
if matches:
  # matches will now not always be None
15
ответ дан 15 August 2018 в 16:39

Указатель чтения перемещается после последнего прочитанного байта / символа. Используйте метод seek() для перемотки указателя чтения к началу.

13
ответ дан 15 August 2018 в 16:39

read() потребляет. Таким образом, вы можете сбросить файл или начать поиск перед повторным чтением. Или, если он выполняет вашу задачу, вы можете использовать read(n) для использования только n байтов.

1
ответ дан 15 August 2018 в 16:39

Я всегда нахожу метод чтения чем-то вроде прогулки по темному переулку. Вы опускаетесь немного и останавливаетесь, но если вы не считаете свои шаги, вы не знаете, насколько далеко вы находитесь. Seek дает решение путем повторного позиционирования, другой вариант - Tell, который возвращает позицию вдоль файла. Может быть, файл Python api может комбинировать чтение и поиск в read_from (position, bytes), чтобы упростить его - пока это не произойдет, вы должны прочитать эту страницу.

1
ответ дан 15 August 2018 в 16:39

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

Похожие вопросы: