Как узнать байтовую позицию строки CSV-файла в python?
Я работаю с огромными CSV-файлами (20-25Mln строк) и не хочу разбивать их на более мелкие части по многим причинам.
мой скрипт читает файл строка за строкой, используя CSV-файла модуль. Мне нужно теперь позицию (номер байта) строки, которая будет прочитана на следующей итерации (или которая только что была прочитана).
пробовал
>>> import csv
>>> f = open("uscompany.csv","rU")
>>> reader = csv.reader(f)
>>> reader.next()
....
>>> f.tell()
8230
но кажется CSV-файла модуль считывает файл блоками. С тех пор, как я продолжаю итерацию, я получаю та же позиция
>>> reader.next()
....
>>> f.tell()
8230
какие предложения? Пожалуйста, совет.
3 ответов
если под "позицией байта" вы подразумеваете позицию байта, как если бы вы прочитали файл как обычный текстовый файл, то мое предложение-сделать именно это. Прочитайте в файле строку за строкой как текст и получите позицию внутри строки таким образом. Вы все еще можете анализировать данные CSV строка за строкой самостоятельно, используя csv
модуль:
for line in myfile:
row = csv.reader([line]).next()
Я думаю, что это отличный дизайн для чтения CSV не предоставьте байтовую позицию такого рода, потому что это действительно не делает много смысл в контексте CSV. Ведь "data"
и data
являются теми же самыми четырьмя байтами данных, что и CSV, но d
может быть 2-й байт 1-й байт в зависимости от того, факультативные кавычки были использованы.
на csv
модуль действительно читает в блоках, используя буфер чтения вперед, как предложено в ответах на этот пост:
.tell () несоответствие
У меня была аналогичная потребность в вас и обобщила мое решение для всех, кто мог бы делать подобные вещи:
https://github.com/loisaidasam/csv-position-reader
надеюсь, что это помогает!