Огромен текстов файл към малки Excel файлове

Имам огромен текстов файл (4 GB), където всеки „ред“ е със синтаксис: [number] [number]_[number] [Text].
Например

123 12_14 Text 1
1234 13_456 Text 2
33 12_12 Text 3
24 678_10 Text 4

Моята цел е тези данни да бъдат запазени като Excel файл, където всеки "ред" в текстовия файл
е ред в Excel файла. Според миналия пример:

[A1] 123
[B1] 12_14
[C1] Text 1
[A2] 1234
[B2] 13_456
[C2] Text 2
[A3] 33
[B3] 12_12
[C3] Text 3
[A4] 24
[B4] 678_10
[C4] Text 4

Моят план е да повторя текстовите „редове“, както е препоръчано тук, да разделя „редовете“
и да запазя към клетките във файл на Excel.

Поради проблема с размера на текста, реших да създам много малки excel файлове, които всички заедно ще бъдат равни на текстовия файл.

След това трябва да анализирам малките файлове на Excel, главно намерени термини, споменати в [Text] клетките, и да преброя броя на външния вид, свързан с [number] клетките (представляващи публикация и ID на публикация).

И накрая, трябва да сумирам всички тези данни в excel файл.

Обмислям най-добрия начин за създаване и анализ на файловете в Excel.
Както споменах тук основните библиотеки са xlrd и csv.


person Presen    schedule 14.08.2013    source източник
comment
Ако единствената ви цел е да анализирате оригиналния текстов файл (неща като преброяване на неща...), тогава това много не е най-лесният начин да го направите. Ако имате някаква друга причина да се окажете с куп екселски файлове, продължете.   -  person Brionius    schedule 14.08.2013
comment
Не е необходимо да зареждате целия текстов файл в паметта, можете просто да прочетете текстовия ред от ред. Разделеният текст като excel е напълно ненужен.   -  person Daniel    schedule 14.08.2013
comment
@Brionius Почти съм сигурен, че нямам други опции освен малки excel файлове, но какъв ще бъде другият подход?   -  person Presen    schedule 14.08.2013
comment
@simpleBob предложеният код (stackoverflow.com/questions/18178089/) не зареждайте целия текст в паметта   -  person Presen    schedule 14.08.2013
comment
@pnuts Беше грешка на начинаещ, съжалявам.   -  person Presen    schedule 14.08.2013
comment
@user1869297 - трудно е да се каже какъв би бил друг подход, освен ако не знам каква е действителната ви цел - ако можете да изясните каква е крайната цел на целия този бизнес, можем да ви помогнем да намерите най-добрия начин.   -  person Brionius    schedule 14.08.2013
comment
четене на файл ред по ред в excel: stackoverflow.com/questions/11528694/   -  person SeanC    schedule 14.08.2013


Отговори (2)


„Почти съм сигурен, че нямам други възможности освен малки excel файлове, но какъв ще бъде другият подход?“

Вашият огромен текстов файл е вид база данни, макар и неудобна. Куп малки Excel файлове са друго, дори по-малко удобно представяне на същата база данни. Предполагам, че искате да направите куп малки файлове, защото Excel има горна граница за броя редове, които може да съдържа (65 000 или 1 000 000 в зависимост от версията на Excel). Въпреки това, както беше отбелязано, Excel файловете са наистина ужасни хранилища на бази данни.

Тъй като вече използвате Python, използвайте модул sqlite3, той вече е вграден и това е истинска база данни и може да обработва повече от милион реда. И става бързо.

Но исках да получа представа колко бързо е с данни в мащаба, който предлагате, така че създадох база данни от 30 милиона реда с приблизително същата сложност като вашия набор от данни. Схемата е проста:

create table words
    (id integer primary key autoincrement not null,
     first text, second text, third text);

и го попълни с произволни триграми, извлечени от /usr/dict/words (имам модул за генериране на тестови данни като този, който прави записи, които изглеждат като

sqlite> select * from words limit 5;
1|salvation|prorates|bird
2|fore|embellishment|empathized
3|scalier|trinity|graze
4|exes|archways|interrelationships
5|voguish|collating|partying

но проста заявка за ред, за който знаех, че е към края, отне повече време, отколкото се надявах:

select * from words where first == "dole" and second == "licked";
29599672|dole|licked|hates

отне около 7 секунди на доста среден 3-годишен десктоп, така че добавих няколко индекса

create index first on words (first);
create index second on words (second);

което удвои размера на файла на базата данни от 1,1 GB на 2,3 GB, но намали времето за проста заявка до доста разумните 0,006 секунди. Не мисля, че ще се справите добре с Excel.

Така че анализирайте данните си както трябва, но след това ги поставете в истинска база данни.

person msw    schedule 15.08.2013

Какъв е проблемът просто да преглеждате файла ред по ред? Ако сте настроени към excel, бих препоръчал openpyxl.

person Martyn    schedule 14.08.2013