Приложение Flask читает файлы csv без сохранения - множественная кодировка [дубликат]

p сам является list, вы можете получить df с p$data.

Пример samll:

library(ggplot2)
p <- ggplot(mtcars, aes(x = mpg, y = cyl)) + geom_point()
identical(p$data, mtcars)
# [1] TRUE
69
задан Glen Selle 14 January 2016 в 16:46
поделиться

7 ответов

Вызов read() читает весь файл и оставляет курсор чтения в конце файла (ничего больше не читать). Если вы хотите прочитать определенное количество строк за раз, вы можете использовать readline(), readlines() или перебирать строки с помощью for line in handle:.

Чтобы ответить на ваш вопрос напрямую, был прочитан, с read() вы можете использовать seek(0), чтобы вернуть курсор чтения к началу файла (docs здесь ). Если вы знаете, что файл не будет слишком большим, вы также можете сохранить вывод read() в переменной, используя его в выражениях поиска.

Ps. Не забудьте закрыть файл после его завершения;)

105
ответ дан Nunser 22 August 2018 в 03:45
поделиться
  • 1
    +1, да, пожалуйста, прочитайте временную переменную, чтобы избежать ненужного ввода-вывода файлов. Это ложная экономика, что вы сохраняете любую память, потому что у вас меньше (явных) переменных. – Nick T 11 October 2010 в 14:45
  • 2
    @NickT: Я ожидал бы, что небольшой файл, который будет считываться несколько раз, кэшируется ОС (по крайней мере, на Linux / OSX), поэтому никаких дополнительных операций ввода-вывода файлов для чтения в два раза. Большие файлы, которые не вписываются в память, не кэшируются, но вы не хотите читать их в переменной, потому что вы начнете замену. Поэтому в случае сомнений всегда читайте несколько раз. Если вы точно знаете, что файлы маленькие, делайте то, что дает самую приятную программу. – Claude 4 June 2014 в 14:41
  • 3
    Срыв может быть автоматизирован с помощью with . – Cees Timmerman 19 January 2016 в 17:47

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

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

>>> a = open('file.txt')
>>> a.read()
#output
>>> a.seek(0)
>>> a.read()
#same output
16
ответ дан Ant 22 August 2018 в 03:45
поделиться

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

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

2
ответ дан Douglas Leeder 22 August 2018 в 03:45
поделиться

Каждый, кто ответил на этот вопрос до сих пор, абсолютно прав - 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
ответ дан Glen Selle 22 August 2018 в 03:45
поделиться

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

13
ответ дан Ignacio Vazquez-Abrams 22 August 2018 в 03:45
поделиться

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

1
ответ дан towi 22 August 2018 в 03:45
поделиться

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

1
ответ дан whatnick 22 August 2018 в 03:45
поделиться
Другие вопросы по тегам:

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