Используем наше "изобретение" filter(None, line.split(' ')) для того, чтобы парсить таблицы файлов типа "август"
Здесь пробуем перенастроить готовый парсер так, чтобы он вырезал таблицы из файлов
!dir C:\Users\kiss\Documents\Xpdf\aerbu_2014_all_csv\2feb
Очевидно, что изменение параметров таблицы произошло в мае 2014 года, однако, мы возьмем авгутовский файл и перенастроим новый вариант парсера под него.
!chcp 65001
!dir C:\Users\kiss\Documents\Xpdf\aebru_2014_all_txt
Пропишем путь к рабочему модулю в переменную окружения¶
import sys
sys.path.append('C:\\Users\\kiss\\SkyDrive\\Docs\\pdftotext\\AEB\\pdgtotext')
sys.path
Вот он, последний, теперь импортируем все сюда
from aebto3tables import *
Проверим, вот константа из модуля:
CSVFOLDER
class August(Aebto3tables):
"""Try to tune august"""
#txtfile_path = 'C:\\Users\\kiss\\Documents\\Xpdf\\aebru_2014_all_txt\\eng_car-sales-in-august-2014.txt'
#csvfilename = 'eng_car-sales-in-august-2014.csv'
#
def tab1fromtxt(self, txtfile_path, csvfilename, csvfolder=CSVFOLDER):
"""
Первая таблица - самые продаваемые марки (50 строк)
Вот первые две:
Lada 151527 159490 -5% 44100 50102 -12%
Renault* 67208 57217 17% 19178 17914 7%
"""
t1 = []
with open(txtfile_path) as f1:
for line in f1:
lns1 = filter(None, line.split(' '))
if len(lns1) in range(6, 9):
if (lns1[-1].find('-') != -1) | (lns1[-1].find('%') != -1):
if (lns1[-4].find('-') != -1) | (lns1[-4].find('%') != -1):
if (line.partition(' ')[2] != ['']) and (line.partition(' ')[0].strip() != 'Total'):
tline = map(str.strip, lns1)
t1.append(tline)
csvfile_path = csvfolder + '\\1aug2\\' + csvfilename
self.tocsv(t1, csvfile_path)
#print t1
def tab2fromtxt(self, txtfile_path, csvfilename, csvfolder=CSVFOLDER):
"""
Вторая - суммарные продажи по фирмам (все фирмы)
NISSAN 30,9 31,1 266169 274285 -3% 29,3 30,2 71977 80630 -12%
AVTOVAZ 17,6 18,1 151527 159490 -5% 18,0 18,8 44100 50102 -12%
"""
t2 = []
with open(txtfile_path) as f2:
for line in f2:
lns2 = filter(None, line.split(' '))
if len(lns2) in range(11, 14):
if (lns2[-1].find('-') != -1) | (lns2[-1].find('%') != -1):
if (lns2[-7].find('-') != -1) | (lns2[-7].find('%') != -1):
if (line.partition(' ')[2] != ['']): #
tline = map(str.strip, lns2)
t2.append(tline)
csvfile_path = csvfolder + '\\2aug2\\' + csvfilename
self.tocsv(t2, csvfile_path)
#print t2
def tab3fromtxt(self, txtfile_path, csvfilename, csvfolder=CSVFOLDER):
"""
Третья должна состоять из 25 строк вида:
1 Granta Lada 52765 26674 98% 15596 9798 59%
2 Solaris Hyundai 35941 38051 -6% 10553 10979 -4%
"""
t3 = []
with open(txtfile_path) as f3:
for line in f3:
lns3 = filter(None, line.split(' '))
if len(lns3) in range(11, 16):
if lns3[0].isdigit():
if (line.find(' ') != -1):
if (line.partition(' ')[2] != ['']) and (line.partition(' ')[0].isdigit()):
tline = map(str.strip, lns3)
t3.append(tline)
csvfile_path = csvfolder + '\\3aug2\\' + csvfilename
self.tocsv(t3, csvfile_path)
#print t3
txtfile_path = 'C:\\Users\\kiss\\Documents\\Xpdf\\aebru_2014_all_txt\\eng_car-sales-in-august-2014.txt'
csvfilename = 'eng_car-sales-in-august-2014.csv'
A2 = August('2014-02')
Сначала пробуем "февральский код" и ищем причины ошибок¶
A2.tab1fromtxt(txtfile_path, csvfilename) # Работает февральский вариант
Вторая таблица показала только эту строчку:¶
A2.tab2fromtxt(txtfile_path, csvfilename)
Оказалось, что в этой таблице добавлены столбцы. Изменил два праметра
#... всего 13 столбцов, а не 11, попробуем включить оба
if len(lns2) in range(11, 14):
#... 7-ой столбец справа, а не 6-ой
if (lns2[-7].find('-') != -1) | (lns2[-7].find('%') != -1):
И все заработало:
A2.tab2fromtxt(txtfile_path, csvfilename)
Для третьей таблицы тоже не понадобились никакие правки
A2.tab3fromtxt(txtfile_path, csvfilename)
Запустим парсер, для этого¶
Раскоментируем строки:
# Было
#csvfile_path = csvfolder + '\\3feb\\' + csvfilename
#self.tocsv(t3, csvfile_path)
print t3
# Стало
csvfile_path = csvfolder + '\\3feb\\' + csvfilename
self.tocsv(t3, csvfile_path)
#print t3
И запустим выполнение¶
# Запускаем на выполнение
A2.alltxt2csv()
Примечание: папки для записи результатов были созданы вручную заранее, нам здесь нужно было лишь отредактировать в сетодах эементы пути \1aug2\, \2aug2\, \3aug3\
Результаты обнадеживают, теперь в двух папках есть все, что надо... кроме января.
!dir C:\Users\kiss\Documents\Xpdf\aerbu_2014_all_csv\2aug2
!dir C:\Users\kiss\Documents\Xpdf\aerbu_2014_all_csv\2feb
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий