В файле CSV
с python мы можем читать весь файл построчно или построчно, я хочу прочитать определенную строку (пример строки номер 24), не читая весь файл и все строки.
прочитать определенную строку в файле csv, python
comment
возможный дубликат Начать чтение и запись в определенной строке в CSV с помощью Python
- person GhitaB   schedule 21.06.2015
Ответы (2)
Вы можете использовать linecache.getline:
linecache.getline(имя файла, номер_строки[, module_globals])
Получить строку lineno из файла с именем имя_файла. Эта функция никогда не вызовет исключение — она вернет '' при ошибках (для найденных строк будет включен завершающий символ новой строки).
import linecache
line = linecache.getline("foo.csv",24)
Или используйте рецепт потребления из itertools для перемещения указателя:
import collections
from itertools import islice
def consume(iterator, n):
"Advance the iterator n-steps ahead. If n is none, consume entirely."
# Use functions that consume iterators at C speed.
if n is None:
# feed the entire iterator into a zero-length deque
collections.deque(iterator, maxlen=0)
else:
# advance to the empty slice starting at position n
next(islice(iterator, n, n), None)
with open("foo.csv") as f:
consume(f,23)
line = next(f)
person
Padraic Cunningham
schedule
21.06.2015
@xtofl, файловый объект является своим собственным итератором, когда вы
for line in f:...
неоднократно вызываете next
- person Padraic Cunningham; 21.06.2015
а начинать чтение с конкретной строки а не с начала? он работает, просто потребляя (f, X) и увеличивая X каждый раз (инициализируя X в нужной позиции), спасибо за ваш полезный ответ :)
- person user3967257; 21.06.2015
@user3967257 user3967257, используйте рецепт потребления, если вы хотите начать с определенной строки, второй потребляемый аргумент — это количество потребляемых строк, а затем просто
for line in f...
, чтобы прочитать остальные строки.
- person Padraic Cunningham; 21.06.2015
это то, что я имею в виду для i в диапазоне (X, предел): потреблять (f, i)
- person user3967257; 21.06.2015
В качестве альтернативы вы можете использовать аргумент nrows
и skiprows
в пандах.
line_number = 30
pd.read_csv('big.csv.gz', sep = "\t", nrows = 1, skiprows = line_number - 1)
помните, что skiprows
может быть списком, поэтому, если вам нужен заголовок, используйте
pd.read_csv('big.csv.gz', sep = "\t", nrows = 1, skiprows = list(range(1, line_number - 1)))
person
user702846
schedule
17.12.2020