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

пятница, 20 февраля 2015 г.

Запускаем из IPyNotebook парсер AEBto3tables, настраиваемся по февральскому файлу и... умнеем

Здесь изобретаем вот такой велосипед filter(None, line.split(' ')), редактируем методы класса, и парсим в новые подпапки (1feb). Новый "ввелосиед" оказался почти идеальным. В конце поста это видно по размерам файлов в папках.

In [1]:
!chcp 65001
!dir C:\Users\kiss\Documents\Xpdf\aebru_2014_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_2014_all_txt

16.02.2015  18:58    <DIR>          .
16.02.2015  18:58    <DIR>          ..
19.02.2015  16:07            39В 554 eng_car-sales-in-april-2014.txt
19.02.2015  16:07            44В 594 eng_car-sales-in-august-2014.txt
19.02.2015  16:07            46В 607 eng_car-sales-in-december-2014.txt
19.02.2015  16:07            46В 456 eng_car-sales-in-july-2014.txt
16.02.2015  18:57            44В 371 eng_car-sales-in-june-2014.txt
16.02.2015  18:58            43В 519 eng_car-sales-in-may-2014.txt
16.02.2015  18:58            46В 828 eng_car-sales-in-november-2014.txt
16.02.2015  18:58            48В 159 eng_car-sales-in-october-2014.txt
16.02.2015  18:58            45В 552 eng_car-sales-in-september-2014.txt
16.02.2015  18:58            39В 596 sales-in-december_2013_eng_final.txt
16.02.2015  18:58            39В 646 sales-in-february_2014_eng_final.txt
16.02.2015  18:58            36В 666 sales-in-january_2014_eng_final_1.txt
16.02.2015  18:58            40В 369 sales-in-march_2014_eng_final.txt
              13 File(s)        561В 917 bytes
               2 Dir(s)  388В 963В 794В 944 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 [47]:
class February(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 + '\\1feb\\' + 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, 12):
                    if (lns2[-1].find('-') != -1) | (lns2[-1].find('%') != -1):
                        if (lns2[-6].find('-') != -1) | (lns2[-6].find('%') != -1):
                            if (line.partition('  ')[2] != ['']):  # 
                                tline = map(str.strip, lns2)
                                t2.append(tline)
        csvfile_path = csvfolder + '\\2feb\\' + 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 + '\\3feb\\' + csvfilename
        self.tocsv(t3, csvfile_path)
        #print t3
In [6]:
txtfile_path = 'C:\\Users\\kiss\\Documents\\Xpdf\\aebru_2014_all_txt\\sales-in-february_2014_eng_final.txt'
csvfilename = 'sales-in-february_2014_eng_final.csv'    
In [48]:
F =  February('2014-02')

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

In [9]:
 F.tab1fromtxt(txtfile_path, csvfilename)   
[['Jeep', '1', '029', '396', '160%', '609', '250', '144%'], ['FIAT*', '988', '680', '45%', '581', '389', '49%'], ['Mercedes-Benz', 'Vans*', '771', '473', '63%', '459', '279', '65%'], ['FAW*', '536', '275', '95%', '234', '207', '13%'], ['Porsche', '300', '439', '-32%', '174', '263', '-34%'], ['Jaguar', '251', '192', '31%', '157', '122', '29%'], ['BAW*', '231', '288', '-20%', '118', '160', '-26%'], ['MINI', '230', '316', '-27%', '148', '176', '-16%'], ['ZAZ', '214', '556', '-62%', '113', '353', '-68%'], ['SEAT', '184', '502', '-63%', '112', '301', '-63%'], ['Cadillac', '177', '224', '-21%', '97', '136', '-29%'], ['Bogdan', '70', '562', '-88%', '14', '301', '-95%'], ['Haima', '41', '76', '-46%', '21', '70', '-70%'], ['smart', '37', '12', '208%', '20', '9', '122%'], ['Isuzu*', '33', '11', '200%', '5', '7', '-29%'], ['TagAZ*', '28', '43', '-35%', '22', '10', '120%'], ['Luxgen', '27', '-', '-', '15', '-', '-'], ['Chrysler', '21', '23', '-9%', '14', '11', '27%'], ['Izh', '15', '158', '-91%', '5', '69', '-93%'], ['Dodge', '6', '28', '-79%', '4', '19', '-79%'], ['Foton*', '5', '6', '-17%', '3', '2', '50%'], ['BYD', '0', '94', '-', '0', '25', '-'], ['Vortex', '0', '282', '-', '0', '201', '-']]

In [20]:
infi ="Infiniti                               1 304  1 551    -16%  833                         926                        -10%"
In []:
jeep = "Jeep                                   1 029  396      160%  609                                                                           250                        144%
"

И как это я не заметил, здесь вместо 11,111 (ка было в августе) в таблице пишется 11 111. Вместо запятой - пробел. А у меня во всех трех методах стоят ограничения на количество элементов в строке. Если бы я их не поставил, было бы труднее понять причину ошибок... Так что получается, что, пока нет простого решения, многочисленные условия помогаю найти недостатки модели (алгоритма)... Формулировка не бесспорная...

Итак. Это хорошая (полезная) ошибка. Она прямо говорит: "Твои приемы парсинга никуда не годятся, придумай что-нибудь другое..."

И вот он, более простой вариант

In [21]:
#
filter(None, infi.split('  '))
Out[21]:
['Infiniti', ' 1 304', '1 551', '-16%', '833', ' 926', '-10%']
In [45]:
list1=F.tab1fromtxt(txtfile_path, csvfilename)
[['Lada', '54 543', '66 947', '-19%', '30 896', '36910', '-16%'], ['Renault*', '29 615', '30 040', '-1%', '16 721', '15299', '9%'], ['Nissan*', '28 209', '22 051', '28%', '17 158', '13126', '31%'], ['Hyundai*', '24 945', '24 795', '1%', '13 901', '13489', '3%'], ['KIA', '24 502', '25 153', '-3%', '13 303', '14094', '-6%'], ['Chevrolet', '21 868', '22 565', '-3%', '12 448', '13023', '-4%'], ['Toyota*', '20 211', '15 197', '33%', '11 892', '8337', '43%'], ['VW', '19 989', '22 468', '-11%', '11 390', '12500', '-9%'], ['Mitsubishi', '11 824', '10 021', '18%', '6 817', '6001', '14%'], ['\xc5\xa0koda', '11 128', '10 946', '2%', '6 384', '6323', '1%'], ['Opel', '10 891', '12 385', '-12%', '6 610', '7174', '-8%'], ['Ford*', '10 556', '13 415', '-21%', '6 306', '7051', '-11%'], ['Daewoo', '8 254', '12 490', '-34%', '4 536', '6797', '-33%'], ['GAZ LCV*', '7 787', '10 154', '-23%', '4 527', '6046', '-25%'], ['Mazda', '6 747', '5 513', '22%', '3 899', '3442', '13%'], ['Mercedes-Benz', '6 230', '4 957', '26%', '3 520', '3055', '15%'], ['BMW', '5 896', '5 256', '12%', '3 356', '3085', '9%'], ['UAZ*', '5 104', '7 075', '-28%', '2 903', '4169', '-30%'], ['Audi', '4 528', '4 525', '0%', '2 905', '2800', '4%'], ['Honda', '4 413', '2 824', '56%', '2 484', '1615', '54%'], ['Peugeot*', '4 197', '5 241', '-20%', '2 354', '2903', '-19%'], ['Citro\xd1\x91n*', '3 912', '3 795', '3%', '2 192', '2214', '-1%'], ['SsangYong', '3 337', '4 437', '-25%', '2 007', '2584', '-22%'], ['Suzuki', '3 189', '3 699', '-14%', '1 707', '2201', '-22%'], ['Chery', '2 846', '2 552', '12%', '1 709', '1521', '12%'], ['Geely', '2 845', '2 323', '22%', '1 687', '1506', '12%'], ['Land Rover', '2 789', '2 326', '20%', '1 867', '1511', '24%'], ['Lifan', '2 666', '2 297', '16%', '1 548', '1454', '6%'], ['Great Wall', '2 334', '2 845', '-18%', '1 402', '1565', '-10%'], ['Subaru', '2 312', '2 221', '4%', '1 374', '1357', '1%'], ['VW vans*', '2 007', '2 000', '0%', '1 058', '1300', '-19%'], ['Volvo', '1 545', '1 396', '11%', '1 143', '1059', '8%'], ['Lexus', '1 421', '1 644', '-14%', '714', '866', '-18%'], ['Infiniti', '1 304', '1 551', '-16%', '833', '926', '-10%'], ['Jeep', '1 029', '396', '160%', '609', '250', '144%'], ['FIAT*', '988', '680', '45%', '581', '389', '49%'], ['Mercedes-Benz', 'Vans*', '771', '473', '63%', '459', '279', '65%'], ['FAW*', '536', '275', '95%', '234', '207', '13%'], ['Porsche', '300', '439', '-32%', '174', '263', '-34%'], ['Jaguar', '251', '192', '31%', '157', '122', '29%'], ['BAW*', '231', '288', '-20%', '118', '160', '-26%'], ['MINI', '230', '316', '-27%', '148', '176', '-16%'], ['ZAZ', '214', '556', '-62%', '113', '353', '-68%'], ['SEAT', '184', '502', '-63%', '112', '301', '-63%'], ['Cadillac', '177', '224', '-21%', '97', '136', '-29%'], ['Bogdan', '70', '562', '-88%', '14', '301', '-95%'], ['Haima', '41', '76', '-46%', '21', '70', '-70%'], ['smart', '37', '12', '208%', '20', '9', '122%'], ['Isuzu*', '33', '11', '200%', '5', '7', '-29%'], ['TagAZ*', '28', '43', '-35%', '22', '10', '120%'], ['Luxgen', '27', '-', '-', '15', '-', '-'], ['Chrysler', '21', '23', '-9%', '14', '11', '27%'], ['Izh', '15', '158', '-91%', '5', '69', '-93%'], ['Dodge', '6', '28', '-79%', '4', '19', '-79%'], ['Foton*', '5', '6', '-17%', '3', '2', '50%'], ['BYD', '0', '94', '-', '0', '25', '-'], ['Vortex', '0', '282', '-', '0', '201', '-']]

In [46]:
len(list1)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-46-9e72f74cc0fa> in <module>()
----> 1 len(list1)

TypeError: object of type 'NoneType' has no len()
In [27]:
F.tab1fromtxt(txtfile_path, csvfilename)   
[['Lada', '54 543', '66 947', '-19%', '30 896', '36910', '-16%'], ['Renault*', '29 615', '30 040', '-1%', '16 721', '15299', '9%'], ['Nissan*', '28 209', '22 051', '28%', '17 158', '13126', '31%'], ['Hyundai*', '24 945', '24 795', '1%', '13 901', '13489', '3%'], ['KIA', '24 502', '25 153', '-3%', '13 303', '14094', '-6%'], ['Chevrolet', '21 868', '22 565', '-3%', '12 448', '13023', '-4%'], ['Toyota*', '20 211', '15 197', '33%', '11 892', '8337', '43%'], ['VW', '19 989', '22 468', '-11%', '11 390', '12500', '-9%'], ['Mitsubishi', '11 824', '10 021', '18%', '6 817', '6001', '14%'], ['\xc5\xa0koda', '11 128', '10 946', '2%', '6 384', '6323', '1%'], ['Opel', '10 891', '12 385', '-12%', '6 610', '7174', '-8%'], ['Ford*', '10 556', '13 415', '-21%', '6 306', '7051', '-11%'], ['Daewoo', '8 254', '12 490', '-34%', '4 536', '6797', '-33%'], ['GAZ LCV*', '7 787', '10 154', '-23%', '4 527', '6046', '-25%'], ['Mazda', '6 747', '5 513', '22%', '3 899', '3442', '13%'], ['Mercedes-Benz', '6 230', '4 957', '26%', '3 520', '3055', '15%'], ['BMW', '5 896', '5 256', '12%', '3 356', '3085', '9%'], ['UAZ*', '5 104', '7 075', '-28%', '2 903', '4169', '-30%'], ['Audi', '4 528', '4 525', '0%', '2 905', '2800', '4%'], ['Honda', '4 413', '2 824', '56%', '2 484', '1615', '54%'], ['Peugeot*', '4 197', '5 241', '-20%', '2 354', '2903', '-19%'], ['Citro\xd1\x91n*', '3 912', '3 795', '3%', '2 192', '2214', '-1%'], ['SsangYong', '3 337', '4 437', '-25%', '2 007', '2584', '-22%'], ['Suzuki', '3 189', '3 699', '-14%', '1 707', '2201', '-22%'], ['Chery', '2 846', '2 552', '12%', '1 709', '1521', '12%'], ['Geely', '2 845', '2 323', '22%', '1 687', '1506', '12%'], ['Land Rover', '2 789', '2 326', '20%', '1 867', '1511', '24%'], ['Lifan', '2 666', '2 297', '16%', '1 548', '1454', '6%'], ['Great Wall', '2 334', '2 845', '-18%', '1 402', '1565', '-10%'], ['Subaru', '2 312', '2 221', '4%', '1 374', '1357', '1%'], ['VW vans*', '2 007', '2 000', '0%', '1 058', '1300', '-19%'], ['Volvo', '1 545', '1 396', '11%', '1 143', '1059', '8%'], ['Lexus', '1 421', '1 644', '-14%', '714', '866', '-18%'], ['Infiniti', '1 304', '1 551', '-16%', '833', '926', '-10%'], ['Jeep', '1 029', '396', '160%', '609', '250', '144%'], ['FIAT*', '988', '680', '45%', '581', '389', '49%'], ['Mercedes-Benz', 'Vans*', '771', '473', '63%', '459', '279', '65%'], ['FAW*', '536', '275', '95%', '234', '207', '13%'], ['Porsche', '300', '439', '-32%', '174', '263', '-34%'], ['Jaguar', '251', '192', '31%', '157', '122', '29%'], ['BAW*', '231', '288', '-20%', '118', '160', '-26%'], ['MINI', '230', '316', '-27%', '148', '176', '-16%'], ['ZAZ', '214', '556', '-62%', '113', '353', '-68%'], ['SEAT', '184', '502', '-63%', '112', '301', '-63%'], ['Cadillac', '177', '224', '-21%', '97', '136', '-29%'], ['Bogdan', '70', '562', '-88%', '14', '301', '-95%'], ['Haima', '41', '76', '-46%', '21', '70', '-70%'], ['smart', '37', '12', '208%', '20', '9', '122%'], ['Isuzu*', '33', '11', '200%', '5', '7', '-29%'], ['TagAZ*', '28', '43', '-35%', '22', '10', '120%'], ['Luxgen', '27', '-', '-', '15', '-', '-'], ['Chrysler', '21', '23', '-9%', '14', '11', '27%'], ['Izh', '15', '158', '-91%', '5', '69', '-93%'], ['Dodge', '6', '28', '-79%', '4', '19', '-79%'], ['Foton*', '5', '6', '-17%', '3', '2', '50%'], ['BYD', '0', '94', '-', '0', '25', '-'], ['Vortex', '0', '282', '-', '0', '201', '-']]

In [38]:
F.tab2fromtxt(txtfile_path, csvfilename) 
[['NISSAN', '31,7', '32,4', '113 671', '120 589', '-6%', '31,8', '31,5', '65 608', '66 261', '-16%'], ['AVTOVAZ', '15,2', '18,0', '54 543', '66 947', '-19%', '15,0', '17,5', '30 896', '36 910', '-16%'], ['RENAULT', '8,2', '8,1', '29 615', '30 040', '-1%', '8,1', '7,3', '16 721', '15 299', '9%'], ['NISSAN', '7,9', '5,9', '28 209', '22 051', '28%', '8,3', '6,2', '17 158', '13 126', '31%'], ['INFINITI', '0,4', '0,4', '1 304', '1 551', '-16%', '0,4', '0,4', '833', '926', '-10%'], ['VW Group', '10,5', '10,8', '37 836', '40 441', '-6%', '10,6', '11,0', '21 849', '23 224', '-6%'], ['VOLKSWAGEN cars', '5,6', '6,0', '19 989', '22 468', '-11%', '5,5', '5,9', '11 390', '12 500', '-9%'], ['VOLKSWAGEN vans', '0,6', '0,5', '2 007', '2 000', '0%', '0,5', '0,6', '1 058', '1 300', '-19%'], ['AUDI', '1,3', '1,2', '4 528', '4 525', '0%', '1,4', '1,3', '2 905', '2 800', '4%'], ['SEAT', '0,1', '0,1', '184', '502', '-63%', '0,1', '0,1', '112', '301', '-63%'], ['\xc5\xa0KODA', '3,1', '2,9', '11 128', '10 946', '2%', '3,1', '3,0', '6 384', '6 323', '1%'], ['GM Group', '9,2', '9,4', '32 936', '35 174', '-6%', '9,3', '9,7', '19 155', '20 333', '-6%'], ['OPEL', '3,0', '3,3', '10 891', '12 385', '-12%', '3,2', '3,4', '6 610', '7 174', '-8%'], ['CHEVROLET', '6,1', '6,1', '21 868', '22 565', '-3%', '6,0', '6,2', '12 448', '13 023', '-4%'], ['CADILLAC', '0,0', '0,1', '177', '224', '-21%', '0,0', '0,1', '97', '136', '-29%'], ['HYUNDAI', '6,9', '6,7', '24 945', '24 795', '1%', '6,7', '6,4', '13 901', '13 489', '3%'], ['KIA', '6,8', '6,7', '24 502', '25 153', '-3%', '6,4', '6,7', '13 303', '14 094', '-6%'], ['TOYOTA Group', '6,0', '4,5', '21 632', '16 841', '28%', '6,1', '4,4', '12 606', '9 203', '37%'], ['TOYOTA', '5,6', '4,1', '20 211', '15 197', '33%', '5,8', '4,0', '11 892', '8 337', '43%'], ['LEXUS', '0,4', '0,4', '1 421', '1 644', '-14%', '0,3', '0,4', '714', '866', '-18%'], ['MITSUBISHI', '3,3', '2,7', '11 824', '10 021', '18%', '3,3', '2,8', '6 817', '6 001', '14%'], ['FORD', '2,9', '3,6', '10 556', '13 415', '-21%', '3,1', '3,3', '6 306', '7 051', '-11%'], ['DAEWOO', '2,3', '3,4', '8 254', '12 490', '-34%', '2,2', '3,2', '4 536', '6 797', '-33%'], ['PSA PEUGEOT CITRO\xc3\x8bN', '2,3', '2,4', '8 109', '9 036', '-10%', '2,2', '2,4', '4 546', '5 117', '-11%'], ['PEUGEOT', '1,2', '1,4', '4 197', '5 241', '-20%', '1,1', '1,4', '2 354', '2 903', '-19%'], ['CITRO\xc3\x8bN', '1,1', '1,0', '3 912', '3 795', '3%', '1,1', '1,1', '2 192', '2 214', '-1%'], ['GAZ LCV', '2,2', '2,7', '7 787', '10 154', '-23%', '2,2', '2,9', '4 527', '6 046', '-25%'], ['MERCEDES-BENZ', '2,0', '1,5', '7 038', '5 442', '29%', '1,9', '1,6', '3 999', '3 343', '20%'], ['MERCEDES-BENZ cars', '1,7', '1,3', '6 230', '4 957', '26%', '1,7', '1,5', '3 520', '3 055', '15%'], ['MERCEDES-BENZ vans', '0,2', '0,1', '771', '473', '63%', '0,2', '0,1', '459', '279', '65%'], ['smart', '0,0', '0,0', '37', '12', '208%', '0,0', '0,0', '20', '9', '122%'], ['MAZDA', '1,9', '1,5', '6 747', '5 513', '22%', '1,9', '1,6', '3 899', '3442', '13%'], ['BMW Group', '1,7', '1,5', '6 126', '5 572', '10%', '1,7', '1,5', '3 504', '3 261', '7%'], ['BMW', '1,6', '1,4', '5 896', '5 256', '12%', '1,6', '1,5', '3 356', '3 085', '9%'], ['MINI', '0,1', '0,1', '230', '316', '-27%', '0,1', '0,1', '148', '176', '-16%'], ['UAZ', '1,4', '1,9', '5 104', '7 075', '-28%', '1,4', '2,0', '2 903', '4 169', '-30%'], ['HONDA', '1,2', '0,8', '4 413', '2 824', '56%', '1,2', '0,8', '2 484', '1 615', '54%'], ['SSANGYONG', '0,9', '1,2', '3 337', '4 437', '-25%', '1,0', '1,2', '2 007', '2 584', '-22%'], ['SUZUKI', '0,9', '1,0', '3 189', '3 699', '-14%', '0,8', '1,0', '1 707', '2 201', '-22%'], ['JAGUAR LAND ROVER', '0,8', '0,7', '3 040', '2 518', '21%', '1,0', '0,8', '2 024', '1 633', '24%'], ['LAND ROVER', '0,8', '0,6', '2 789', '2 326', '20%', '0,9', '0,7', '1 867', '1 511', '24%'], ['JAGUAR', '0,1', '0,1', '251', '192', '31%', '0,1', '0,1', '157', '122', '29%'], ['CHERY', '0,8', '0,7', '2 846', '2 552', '12%', '0,8', '0,7', '1 709', '1 521', '12%'], ['GEELY', '0,8', '0,6', '2 845', '2 323', '22%', '0,8', '0,7', '1 687', '1 506', '12%'], ['LIFAN', '0,7', '0,6', '2 666', '2 297', '16%', '0,7', '0,7', '1 548', '1 454', '6%'], ['GREAT WALL', '0,6', '0,8', '2 334', '2 845', '-18%', '0,7', '0,7', '1 402', '1 565', '-10%'], ['SUBARU', '0,6', '0,6', '2 312', '2 221', '4%', '0,7', '0,6', '1 374', '1 357', '1%'], ['CHRYSLER Group', '0,6', '0,3', '2 044', '1 127', '81%', '0,6', '0,3', '1 208', '669', '81%'], ['FIAT', '0,3', '0,2', '988', '680', '45%', '0,3', '0,2', '581', '389', '49%'], ['CHRYSLER', '0,0', '0,0', '21', '23', '-9%', '0,0', '0,0', '14', '11', '27%'], ['JEEP', '0,3', '0,1', '1 029', '396', '160%', '0,3', '0,1', '609', '250', '144%'], ['DODGE', '0,0', '0,0', '6', '28', '-79%', '0,0', '0,0', '4', '19', '-79%'], ['VOLVO', '0,4', '0,4', '1 545', '1 396', '11%', '0,6', '0,5', '1 143', '1 059', '8%'], ['FAW', '0,1', '0,1', '536', '275', '95%', '0,1', '0,1', '234', '207', '13%'], ['PORSCHE', '0,1', '0,1', '300', '439', '-32%', '0,1', '0,1', '174', '263', '-34%'], ['BAW', '0,1', '0,1', '231', '288', '-20%', '0,1', '0,1', '118', '160', '-26%'], ['ZAZ', '0,1', '0,1', '214', '556', '-62%', '0,1', '0,2', '113', '353', '-68%'], ['BOGDAN', '0,0', '0,2', '70', '562', '-88%', '0,0', '0,1', '14', '301', '-95%'], ['HAIMA', '0,0', '0,0', '41', '76', '-46%', '0,0', '0,0', '21', '70', '-70%'], ['ISUZU', '0,0', '0,0', '33', '11', '200%', '0,0', '0,0', '5', '7', '-29%'], ['TAGAZ', '0,0', '0,0', '28', '43', '-35%', '0,0', '0,0', '22', '10', '120%'], ['LUXGEN', '0,0', '-', '27', '-', '-', '0,0', '-', '15', '-', '-'], ['IZH', '0,0', '0,0', '15', '158', '-91%', '0,0', '0,0', '5', '69', '-93%'], ['FOTON', '0,0', '0,0', '5', '6', '-17%', '0,0', '0,0', '3', '2', '50%'], ['BYD', '-', '0,0', '0', '94', '-', '-', '0,0', '0', '25', '-'], ['VORTEX', '-', '0,1', '0', '282', '-', '-', '0,1', '0', '201', '-'], ['Total', '100,0', '100,0', '359 138', '372 740', '-4%', '100,0', '100,0', '206 476', '210 663', '-2%'], ['SOLLERS Group', '2,4', '3,1', '8474', '11523', '-26%', '2,4', '3,2', '4915', '6760', '-27%'], ['ISUZU', '0,0', '0,0', '33', '11', '200%', '0,0', '0,0', '5', '7', '-29%'], ['SSANGYONG', '0,9', '1,2', '3 337', '4 437', '-25%', '1,0', '1,2', '2 007', '2584', '-22%'], ['UAZ', '1,4', '1,9', '5 104', '7 075', '-28%', '1,4', '2,0', '2 903', '4169', '-30%']]

In [35]:
F.tab3fromtxt(txtfile_path, csvfilename) 
[['1', 'Granta', 'Lada', '19535', '22796', '(3 261)', '-14%', '11280', '12207', '(927)', '-8%'], ['2', 'Solaris', 'Hyundai', '15607', '15778', '(171)', '-1%', '8660', '8425', '235', '3%'], ['3', 'Duster', 'Renault', '13131', '11338', '1793', '16%', '7541', '5964', '1 577', '26%'], ['4', 'New Rio', 'KIA', '11198', '11512', '(314)', '-3%', '5874', '6768', '(894)', '-13%'], ['5', 'Kalina', 'Lada', '10450', '13167', '(2 717)', '-21%', '6186', '7151', '(965)', '-13%'], ['6', 'Polo', 'VW', '8941', '9687', '(746)', '-8%', '5105', '5056', '49', '1%'], ['7', 'Largus', 'Lada', '8584', '6470', '2114', '33%', '4792', '3594', '1 198', '33%'], ['8', 'Almera', 'Nissan', '7474', '0', '7474', '-', '4481', '0', '4 481', '-'], ['9', 'Priora', 'Lada', '7414', '10183', '(2 769)', '-27%', '4090', '6509', '(2 419)', '-37%'], ['10', 'Logan', 'Renault', '6792', '7401', '(609)', '-8%', '3788', '3723', '65', '2%'], ['11', 'Sandero', 'Renault', '6386', '6709', '(323)', '-5%', '3591', '3220', '371', '12%'], ['12', 'Cruze', 'Chevrolet', '6271', '6202', '69', '1%', '3542', '3735', '(193)', '-5%'], ['13', 'Niva', 'Chevrolet', '6247', '7611', '(1 364)', '-18%', '3625', '4274', '(649)', '-15%'], ['14', 'X-Trail', 'Nissan', '5916', '4207', '1709', '41%', '3229', '2226', '1 003', '45%'], ['15', 'Octavia A7', 'Skoda', '5467', '0', '5467', '-', '3028', '0', '3 028', '-'], ['16', '4x4', 'Lada', '5462', '6995', '(1 533)', '-22%', '3148', '3553', '(405)', '-11%'], ['17', 'Focus', 'Ford', '5443', '9295', '(3 852)', '-41%', '3416', '4911', '(1 495)', '-30%'], ['18', 'Sportage', 'KIA', '5273', '4663', '610', '13%', '3388', '2211', '1 177', '53%'], ['19', 'Astra', 'Opel', '5196', '5672', '(476)', '-8%', '3071', '3230', '(159)', '-5%'], ['20', 'ix35', 'Hyundai', '5078', '4609', '469', '10%', '2733', '2455', '278', '11%'], ['21', 'Qashqai', 'Nissan', '5012', '6089', '(1 077)', '-18%', '2860', '3704', '(844)', '-23%'], ['22', 'RAV 4', 'Toyota', '4817', '2128', '2689', '126%', '2537', '1030', '1 507', '146%'], ['23', 'Gentra', 'Daewoo', '4569', '0', '4569', '-', '2450', '0', '2 450', '-'], ['24', 'Corolla', 'Toyota', '4508', '2856', '1652', '58%', '2613', '1614', '999', '62%'], ['25', 'Camry', 'Toyota', '4399', '4478', '(79)', '-2%', '2870', '2635', '235', '9%']]

В этом новом варианте операторы с partition(' ') не нужны, однако я их пока не стал убирать

Вот, как они работают. Пока ясно, что те же проверки можно организовать и для вариант с фильтрацией... он проще

In [44]:
line.partition('  ')
Out[44]:
('1',
 '  ',
 ' Granta      Lada    11,860  14,951   (3,091)      1       Granta         Lada       95,154           113,738  (18,584) ')
In [46]:
line.partition('  ')[0].isdigit()
Out[46]:
True

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

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

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

И запустим выполнение

In [49]:
# Запускаем на выполнение
F.alltxt2csv()

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

Результаты обнадеживают

In [50]:
!dir C:\Users\kiss\Documents\Xpdf\aerbu_2014_all_csv
 Volume in drive C has no label.
 Volume Serial Number is 6017-2A0B

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

20.02.2015  13:48    <DIR>          .
20.02.2015  13:48    <DIR>          ..
19.02.2015  16:07    <DIR>          1
19.02.2015  22:08    <DIR>          1aug
20.02.2015  18:56    <DIR>          1feb
19.02.2015  16:07    <DIR>          2
19.02.2015  22:08    <DIR>          2aug
20.02.2015  18:56    <DIR>          2feb
16.02.2015  18:58    <DIR>          3
19.02.2015  22:08    <DIR>          3aug
20.02.2015  18:56    <DIR>          3feb
               0 File(s)              0 bytes
              11 Dir(s)  388В 968В 935В 424 bytes free

In [51]:
!dir C:\Users\kiss\Documents\Xpdf\aerbu_2014_all_csv\1feb
 Volume in drive C has no label.
 Volume Serial Number is 6017-2A0B

 Directory of C:\Users\kiss\Documents\Xpdf\aerbu_2014_all_csv\1feb

20.02.2015  18:56    <DIR>          .
20.02.2015  18:56    <DIR>          ..
20.02.2015  18:56             3В 025 eng_car-sales-in-april-2014.csv
20.02.2015  18:56             3В 521 eng_car-sales-in-august-2014.csv
20.02.2015  18:56             3В 346 eng_car-sales-in-december-2014.csv
20.02.2015  18:56             3В 182 eng_car-sales-in-july-2014.csv
20.02.2015  18:56             3В 158 eng_car-sales-in-june-2014.csv
20.02.2015  18:56             3В 189 eng_car-sales-in-may-2014.csv
20.02.2015  18:56             3В 353 eng_car-sales-in-november-2014.csv
20.02.2015  18:56             3В 582 eng_car-sales-in-october-2014.csv
20.02.2015  18:56             3В 453 eng_car-sales-in-september-2014.csv
20.02.2015  18:56             3В 144 sales-in-december_2013_eng_final.csv
20.02.2015  18:56             2В 935 sales-in-february_2014_eng_final.csv
20.02.2015  18:56                34 sales-in-january_2014_eng_final_1.csv
20.02.2015  18:56             2В 912 sales-in-march_2014_eng_final.csv
              13 File(s)         38В 834 bytes
               2 Dir(s)  388В 968В 931В 328 bytes free

In [52]:
!dir C:\Users\kiss\Documents\Xpdf\aerbu_2014_all_csv\2feb
 Volume in drive C has no label.
 Volume Serial Number is 6017-2A0B

 Directory of C:\Users\kiss\Documents\Xpdf\aerbu_2014_all_csv\2feb

20.02.2015  18:56    <DIR>          .
20.02.2015  18:56    <DIR>          ..
20.02.2015  18:56             5В 757 eng_car-sales-in-april-2014.csv
20.02.2015  18:56               104 eng_car-sales-in-august-2014.csv
20.02.2015  18:56               101 eng_car-sales-in-december-2014.csv
20.02.2015  18:56               103 eng_car-sales-in-july-2014.csv
20.02.2015  18:56               165 eng_car-sales-in-june-2014.csv
20.02.2015  18:56             1В 653 eng_car-sales-in-may-2014.csv
20.02.2015  18:56               103 eng_car-sales-in-november-2014.csv
20.02.2015  18:56               103 eng_car-sales-in-october-2014.csv
20.02.2015  18:56               104 eng_car-sales-in-september-2014.csv
20.02.2015  18:56             5В 276 sales-in-december_2013_eng_final.csv
20.02.2015  18:56             5В 530 sales-in-february_2014_eng_final.csv
20.02.2015  18:56                 0 sales-in-january_2014_eng_final_1.csv
20.02.2015  18:56             5В 543 sales-in-march_2014_eng_final.csv
              13 File(s)         24В 542 bytes
               2 Dir(s)  388В 968В 804В 352 bytes free

In [53]:
!dir C:\Users\kiss\Documents\Xpdf\aerbu_2014_all_csv\3feb
 Volume in drive C has no label.
 Volume Serial Number is 6017-2A0B

 Directory of C:\Users\kiss\Documents\Xpdf\aerbu_2014_all_csv\3feb

20.02.2015  18:56    <DIR>          .
20.02.2015  18:56    <DIR>          ..
20.02.2015  18:56             2В 054 eng_car-sales-in-april-2014.csv
20.02.2015  18:56             2В 423 eng_car-sales-in-august-2014.csv
20.02.2015  18:56             2В 426 eng_car-sales-in-december-2014.csv
20.02.2015  18:56             2В 433 eng_car-sales-in-july-2014.csv
20.02.2015  18:56             2В 165 eng_car-sales-in-june-2014.csv
20.02.2015  18:56             2В 145 eng_car-sales-in-may-2014.csv
20.02.2015  18:56             2В 390 eng_car-sales-in-november-2014.csv
20.02.2015  18:56             2В 031 eng_car-sales-in-october-2014.csv
20.02.2015  18:56             2В 454 eng_car-sales-in-september-2014.csv
20.02.2015  18:56             2В 094 sales-in-december_2013_eng_final.csv
20.02.2015  18:56             1В 979 sales-in-february_2014_eng_final.csv
20.02.2015  18:56                 0 sales-in-january_2014_eng_final_1.csv
20.02.2015  18:56             2В 034 sales-in-march_2014_eng_final.csv
              13 File(s)         26В 628 bytes
               2 Dir(s)  388В 968В 669В 184 bytes free



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

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

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