Поиск по блогу

суббота, 21 февраля 2015 г.

Переопределние класса AEBto3tables для таблиц января 2015 и запись результатов

Как и год назад, в Январе таблицы не включают столбцы с предыдущими месяцами. Но, кроме того, в таблицах 2 и 3 убрали столбцы. Так что пришлось выполнить очередную перенастройку.

In [1]:
!chcp 65001
!dir C:\Users\kiss\Documents\Xpdf\aebru_2015_all_txt
Active code page: 65001
 Volume in drive C has no label.
 Volume Serial Number is 6017-2A0B

 Directory of C:\Users\kiss\Documents\Xpdf\aebru_2015_all_txt

16.02.2015  16:24    <DIR>          .
16.02.2015  16:24    <DIR>          ..
16.02.2015  17:41            40В 993 eng_car-sales-in-january-2015.txt
               1 File(s)         40В 993 bytes
               2 Dir(s)  389В 219В 586В 048 bytes free

Пропишем путь к рабочему модулю в переменную окружения

In [2]:
import sys
sys.path.append('C:\\Users\\kiss\\SkyDrive\\Docs\\pdftotext\\AEB\\pdgtotext')
In [3]:
sys.path
Out[3]:
['',
 'C:\\Users\\kiss\\Documents\\Python-Django',
 'C:\\Users\\kiss\\Anaconda\\Lib\\site-packages\\django\\bin',
 'C:\\Users\\kiss\\Anaconda\\python27.zip',
 'C:\\Users\\kiss\\Anaconda\\DLLs',
 'C:\\Users\\kiss\\Anaconda\\lib',
 'C:\\Users\\kiss\\Anaconda\\lib\\plat-win',
 'C:\\Users\\kiss\\Anaconda\\lib\\lib-tk',
 'C:\\Users\\kiss\\Anaconda',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\PIL',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\Sphinx-1.2.3-py2.7.egg',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\win32',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\win32\\lib',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\Pythonwin',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\queuelib-1.2.2-py2.7.egg',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\runipy-0.1.1-py2.7.egg',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\setuptools-11.3.1-py2.7.egg',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\IPython\\extensions',
 'C:\\Users\\kiss\\SkyDrive\\Docs\\pdftotext\\AEB\\pdgtotext']

Вот он, последний, теперь импортируем все сюда

In [4]:
from aebto3tables import *

Проверим, вот константа из модуля:

In [5]:
CSVFOLDER
Out[5]:
'C:\\Users\\kiss\\Documents\\Xpdf\\aerbu_2014_all_csv'
In [25]:
class January15 (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(4, 5):
                        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 + '\\1jan\\' + 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(7, 8):
                    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 + '\\2jan\\' + 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(6, 7):
                    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 + '\\3jan\\' + csvfilename
        self.tocsv(t3, csvfile_path)
        #print t3
In [6]:
txtfile_path = 'C:\\Users\\kiss\\Documents\\Xpdf\\aebru_2015_all_txt\\eng_car-sales-in-january-2015.txt'
csvfilename = 'eng_car-sales-in-january-2015.csv'    
In [26]:
J15 =  January15('2015-01')

Если не переопределить эту сонстанту, то все три файла запишутся в 2014 год (команды для записи в конце страницы), чтобы не забыть потом, сделаем это перед отладкой.

In [22]:
CSVFOLDER = 'C:\\Users\\kiss\\Documents\\Xpdf\\aerbu_2015_all_csv'

Сначала пробуем исправленный по pdf файлу вариант и ищем причины ошибок

In [10]:
J15.tab1fromtxt(txtfile_path, csvfilename)   # ничего не менял
[['Lada', '17,492', '23,647', '-26%'], ['Hyundai*', '12,707', '11,044', '15%'], ['KIA', '11,346', '11,199', '1%'], ['Nissan*', '9,101', '11,051', '-18%'], ['Renault*', '8,809', '12,894', '-32%'], ['Toyota*', '7,149', '8,319', '-14%'], ['VW', '6,165', '8,599', '-28%'], ['\xc5\xa0koda', '5,125', '4,744', '8%'], ['Mitsubishi', '3,220', '5,007', '-36%'], ['Mercedes-Benz', '3,175', '2,710', '17%'], ['Chevrolet', '3,050', '9,420', '-68%'], ['Datsun', '2,933', '-', '-'], ['BMW', '2,545', '2,540', '0%'], ['Mazda', '2,384', '2,848', '-16%'], ['UAZ*', '2,253', '2,201', '2%'], ['Daewoo', '2,015', '3,718', '-46%'], ['GAZ LCV*', '1,828', '3,260', '-44%'], ['Ford*', '1,813', '4,250', '-57%'], ['Audi', '1,410', '1,623', '-13%'], ['Opel', '1,073', '4,281', '-75%'], ['Subaru', '916', '938', '-2%'], ['Land Rover', '775', '922', '-16%'], ['Lifan', '763', '1,118', '-32%'], ['SsangYong', '733', '1,330', '-45%'], ['Infiniti', '690', '471', '46%'], ['Lexus', '690', '707', '-2%'], ['VW vans*', '608', '949', '-36%'], ['Citro\xd1\x91n*', '480', '1,720', '-72%'], ['Suzuki', '455', '1,482', '-69%'], ['Geely', '450', '1,158', '-61%'], ['Peugeot*', '418', '1,843', '-77%'], ['Great Wall', '405', '932', '-57%'], ['Honda', '384', '1,929', '-80%'], ['FIAT*', '296', '407', '-27%'], ['Volvo', '270', '402', '-33%'], ['Chery', '230', '1,137', '-80%'], ['Jeep', '205', '420', '-51%'], ['Porsche', '194', '126', '54%'], ['Brilliance', '97', '-', '-'], ['MINI', '91', '82', '11%'], ['Acura', '73', '-', '-'], ['Jaguar', '59', '94', '-37%'], ['Haima', '41', '20', '105%'], ['Cadillac', '38', '80', '-53%'], ['SEAT', '31', '72', '-57%'], ['BAW*', '29', '113', '-74%'], ['Isuzu*', '29', '28', '4%'], ['smart', '19', '17', '12%'], ['JAC', '15', '-', '-'], ['Chrysler', '4', '7', '-43%'], ['Alfa Romeo', '3', '-', '-'], ['Foton*', '1', '2', '-50%'], ['ZAZ', '-', '101', '-'], ['Luxgen', '-', '12', '-'], ['FAW', '-', '302', '-'], ['Bogdan', '-', '56', '-'], ['Izh', '-', '10', '-'], ['TagAZ*', '-', '6', '-'], ['Dodge', '-', '2', '-']]

Вторая таблица (уменьшил количество столбцов):

In [15]:
J15.tab2fromtxt(txtfile_path, csvfilename) 
[['AVTOVAZ-RENAULT-NISSAN', '33.8', '31.5', '2.3', '39,025', '48,063', '-18.8%'], ['AVTOVAZ', '15.2', '15.5', '(0.3)', '17,492', '23,647', '-26.0%'], ['RENAULT', '7.6', '8.4', '(0.8)', '8,809', '12,894', '-31.7%'], ['NISSAN', '7.9', '7.2', '0.7', '9,101', '11,051', '-17.6%'], ['INFINITI', '0.6', '0.3', '0.3', '690', '471', '46.5%'], ['Datsun', '2.5', '-', '-', '2,933', '-', '-'], ['VW Group', '11.6', '10.5', '1.1', '13,339', '15,987', '-16.6%'], ['AUDI', '1.2', '1.1', '1.1', '1,410', '1,623', '-13.1%'], ['SEAT', '0.0', '0.0', '0.0', '31', '72', '-56.9%'], ['\xc5\xa0KODA', '4.4', '3.1', '1.3', '5,125', '4,744', '8.0%'], ['HYUNDAI', '11.0', '7.2', '3.8', '12,707', '11,044', '15.1%'], ['KIA', '9.8', '7.3', '2.5', '11,346', '11,199', '1.3%'], ['TOYOTA Group', '6.8', '5.9', '0.9', '7,839', '9,026', '-13.2%'], ['TOYOTA', '6.2', '5.4', '0.8', '7,149', '8,319', '-14.1%'], ['LEXUS', '0.6', '0.5', '0.1', '690', '707', '-2.4%'], ['GM Group', '3.6', '9.0', '(5.4)', '4,161', '13,781', '-69.8%'], ['OPEL', '0.9', '2.8', '(1.9)', '1,073', '4,281', '-74.9%'], ['CHEVROLET', '2.6', '6.2', '(3.6)', '3,050', '9,420', '-67.6%'], ['CADILLAC', '0.0', '0.1', '(0.1)', '38', '80', '-52.5%'], ['MERCEDES-BENZ', '3.0', '2.0', '1.0', '3,499', '3,039', '15.1%'], ['MERCEDES-BENZ cars', '2.8', '1.8', '1.0', '3,175', '2,710', '17.2%'], ['MERCEDES-BENZ vans', '0.3', '0.2', '0.1', '305', '312', '-2.2%'], ['smart', '0.0', '0.0', '0.0', '19', '17', '11.8%'], ['MITSUBISHI', '2.8', '3.3', '(0.5)', '3,220', '5,007', '-35.7%'], ['BMW Group', '2.3', '1.7', '0.6', '2,636', '2,622', '0.5%'], ['BMW', '2.2', '1.7', '0.5', '2,545', '2,540', '0.2%'], ['MINI', '0.1', '0.1', '0.0', '91', '82', '11.0%'], ['MAZDA', '2.1', '1.9', '0.2', '2,384', '2,848', '-16.3%'], ['UAZ', '2.0', '1.4', '0.6', '2,253', '2,201', '2.4%'], ['DAEWOO', '1.7', '2.4', '(0.7)', '2,015', '3,718', '-45.8%'], ['GAZ LCV', '1.6', '2.1', '(0.5)', '1,828', '3,260', '-43.9%'], ['FORD', '1.6', '2.8', '(1.2)', '1,813', '4,250', '-57.3%'], ['SUBARU', '0.8', '0.6', '0.2', '916', '938', '-2.3%'], ['PSA PEUGEOT CITRO\xd0\x81N', '0.8', '2.3', '(1.5)', '898', '3,563', '-74.8%'], ['PEUGEOT', '0.4', '1.2', '(0.8)', '418', '1,843', '-77.3%'], ['CITRO\xd0\x81N', '0.4', '1.1', '(0.7)', '480', '1,720', '-72.1%'], ['JAGUAR LAND ROVER', '0.7', '0.7', '0.0', '834', '1,016', '-17.9%'], ['LAND ROVER', '0.7', '0.6', '0.1', '775', '922', '-15.9%'], ['JAGUAR', '0.1', '0.1', '0.0', '59', '94', '-37.2%'], ['LIFAN', '0.7', '0.7', '0.0', '763', '1,118', '-31.8%'], ['SSANGYONG', '0.6', '0.9', '(0.3)', '733', '1,330', '-44.9%'], ['CHRYSLER Group', '0.4', '0.5', '(0.1)', '508', '836', '-39.2%'], ['FIAT', '0.3', '0.3', '0.0', '296', '407', '-27.3%'], ['CHRYSLER', '0.0', '0.0', '0.0', '4', '7', '-42.9%'], ['JEEP', '0.2', '0.3', '(0.1)', '205', '420', '-51.2%'], ['DODGE', '-', '0.0', '-', '-', '2', '-'], ['ALFA ROMEO', '0.0', '-', '-', '3', '-', '-'], ['HONDA Group', '0.4', '1.3', '(0.9)', '457', '1,929', '-76.3%'], ['HONDA', '0.3', '1.3', '(1.0)', '384', '1,929', '-80.1%'], ['ACURA', '0.1', '-', '-', '73', '-', '-'], ['SUZUKI', '0.4', '1.0', '(0.6)', '455', '1,482', '-69.3%'], ['GEELY', '0.4', '0.8', '(0.4)', '450', '1,158', '-61.1%'], ['GREAT WALL', '0.4', '0.6', '(0.2)', '405', '932', '-56.5%'], ['VOLVO', '0.2', '0.3', '(0.1)', '270', '402', '-32.8%'], ['CHERY', '0.2', '0.7', '(0.5)', '230', '1,137', '-79.8%'], ['PORSCHE', '0.2', '0.1', '0.1', '194', '126', '54.0%'], ['BRILLIANCE', '0.1', '-', '-', '97', '-', '-'], ['HAIMA', '0.0', '0.0', '0.0', '41', '20', '105.0%'], ['BAW', '0.0', '0.1', '(0.1)', '29', '113', '-74.3%'], ['ISUZU', '0.0', '0.0', '0.0', '29', '28', '3.6%'], ['JAC', '0.0', '-', '-', '15', '-', '-'], ['FOTON', '0.0', '0.0', '0.0', '1', '2', '-50.0%'], ['LUXGEN', '-', '0.0', '-', '-', '12', '-'], ['TAGAZ', '-', '0.0', '-', '-', '6', '-'], ['FAW', '-', '0.2', '-', '-', '302', '-'], ['ZAZ', '-', '0.1', '-', '-', '101', '-'], ['IZH', '-', '0.0', '-', '-', '10', '-'], ['BOGDAN', '-', '0.0', '-', '-', '56', '-'], ['SOLLERS Group', '2.6', '2.3', '0.3', '3,015', '3,559', '-15.3%'], ['ISUZU', '0.0', '0.0', '0.0', '29', '28', '4%'], ['SSANGYONG', '0.6', '0.9', '(0.3)', '733', '1,330', '-45%'], ['UAZ', '2.0', '1.4', '0.6', '2,253', '2,201', '2%']]

Для третьей таблицы нужно было изменить параметры фильтров: количество столбцов и #and (line.partition(' ')[0].isdigit()):

In [19]:
J15.tab3fromtxt(txtfile_path, csvfilename) 
[['1', 'Solaris', 'Hyundai', '8,217', '6,947', '1,270'], ['2', 'Granta', 'Lada', '7,737', '8,255', '-518'], ['3', 'New Rio', 'KIA', '5,177', '5,324', '-147'], ['4', 'Logan', 'Renault', '3,366', '3,004', '362'], ['5', 'Polo', 'VW', '3,324', '3,836', '-512'], ['6', '4x4', 'Lada', '2,948', '2,314', '634'], ['7', 'on-DO', 'Datsun', '2,933', '-', '-'], ['8', 'Duster', 'Renault', '2,743', '5,590', '-2,847'], ['9', 'Kalina', 'Lada', '2,526', '4,264', '-1,738'], ['10', 'Almera', 'Nissan', '2,261', '2,993', '-732'], ['11', 'Sandero', 'Renault', '2,166', '2,795', '-629'], ['12', 'Camry', 'Toyota', '2,109', '1,529', '580'], ['13', 'ix35', 'Hyundai', '2,079', '2,345', '-266'], ['14', 'RAV 4', 'Toyota', '2,042', '2,280', '-238'], ['15', 'Niva', 'Chevrolet', '1,997', '2,622', '-625'], ['16', 'Octavia A7', '\xc5\xa0koda', '1,994', '2,439', '-445'], ['17', 'Priora', 'Lada', '1,990', '3,324', '-1,334'], ['18', 'Rapid', '\xc5\xa0koda', '1,948', '-', '-'], ['19', 'Qashqai', 'Nissan', '1,906', '2,152', '-246'], ['20', 'Largus', 'Lada', '1,903', '3,792', '-1,889'], ['21', 'New Sorento', 'KIA', '1,577', '300', '1,277'], ['22', 'Sportage', 'KIA', '1,547', '1,885', '-338'], ['23', 'ASX', 'Mitsubishi', '1,464', '1,473', '-9'], ['24', 'Sentra', 'Nissan', '1,412', '-', '-'], ['25', "New Cee'd", 'KIA', '1,302', '2,265', '-963']]

Запустим парсер, для этого

Раскоментируем строки:

In []:
# Было
#csvfile_path = csvfolder + '\\3aug2\\' + csvfilename
#self.tocsv(t3, csvfile_path)
print t3
In []:
# Стало
csvfile_path = csvfolder + '\\3aug2\\' + csvfilename
self.tocsv(t3, csvfile_path)
#print t3

И запустим выполнение для каждого файла

Примечание: папки для записи результатов были созданы вручную заранее, нам здесь нужно было лишь отредактировать в сетодах эементы пути '\1jan\', '\2jan\', '\3jan\'

In [27]:
# Запускаем на выполнение
J15.tab1fromtxt(txtfile_path, csvfilename) 
J15.tab2fromtxt(txtfile_path, csvfilename) 
J15.tab3fromtxt(txtfile_path, csvfilename) 

В соответствующих папках должны появиться файлы .csv



Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий