Форум сайта python.su
294
AcamoriДа какая разница, py.user.next пытаеться до вас донести другое, если данные неструктурированы, нужно определить признаки по которым вы будете искать нужную вам информацию.
В результате имеем одну длинную строку которую надо будет дробить на составные части или же сразу в ней искать нужные значения. Вот и думаю над алгоритмами поиска нужных частей.
[code python][/code]
Отредактировано PEHDOM (Апрель 12, 2017 22:48:09)
Офлайн
857
AcamoriНу всё, теперь думай, как разобрать строку. Как выше тебе писал: если можешь вручную разобрать её правильно, значит у тебя есть какой-то метод. Вот надо это всё вытащить наружу, задавая себе вопросы “как я вытянул это значение из всего текста?”, “как я определил, что всё правильно вытянул?”. Тогда ты узнаешь признаки, по которым определяешь всё. Очень часто это делается подсознательно (будто ты всегда умел это делать), поэтому надо себе задавать вопросы, чтобы вытащить наружу. Например, вот ты текст обычный читаешь глазами, а как ты понимаешь, какое слово прочитал? Ты заметил, что прочитал сначала каждую букву, определил значение этой буквы, определил, как она звучит? А ведь это не врождённое (попробуй на турецком что-нибудь прочитать или на китайском), это бессознательный навык, выработанный в начальной школе. Вот при поиске значений точно так же работают бессознательные навыки, которые надо вытащить и по ним составлять алгоритм разбора. А потом программу просто пишешь, которая фактически делает то же самое, что ты руками делал, и “думает” так же, как ты думал в тот момент, когда разбирал.
Вот тут переменной P1 присваивается значение строки вытянутой с помощью операции pageObj.extractText().
Отредактировано py.user.next (Апрель 13, 2017 06:28:57)
Офлайн
1
PEHDOM
Да какая разница, py.user.next пытаеться до вас донести другое, если данные неструктурированы, нужно определить признаки по которым вы будете искать нужную вам информацию.

py.user.next
Ну всё, теперь думай, как разобрать строку. Как выше тебе писал: если можешь вручную разобрать её правильно, значит у тебя есть какой-то метод. Вот надо это всё вытащить наружу, задавая себе вопросы “как я вытянул это значение из всего текста?”, “как я определил, что всё правильно вытянул?”. Тогда ты узнаешь признаки, по которым определяешь всё. Очень часто это делается подсознательно (будто ты всегда умел это делать), поэтому надо себе задавать вопросы, чтобы вытащить наружу. Например, вот ты текст обычный читаешь глазами, а как ты понимаешь, какое слово прочитал? Ты заметил, что прочитал сначала каждую букву, определил значение этой буквы, определил, как она звучит? А ведь это не врождённое (попробуй на турецком что-нибудь прочитать или на китайском), это бессознательный навык, выработанный в начальной школе. Вот при поиске значений точно так же работают бессознательные навыки, которые надо вытащить и по ним составлять алгоритм разбора. А потом программу просто пишешь, которая фактически делает то же самое, что ты руками делал, и “думает” так же, как ты думал в тот момент, когда разбирал.
>>>A1porch = {'Y': None, 'N': None} >>>if 'Porch' in P1: ...... A1porch['Y'] = 'Porch' else: ...... A1porch['N'] = 'No Porch' >>>myfile = open(r'D:\python\a1.txt', 'w') >>>if A1porch['N'] == None: ...... myfile.write('%s\t%s\n' % ('Exterior:', A1porch['Y'])) else: ...... myfile.write('%s\t%s\n' % ('Exterior:', A1porch['N'])) >>>>myfile.close()
>>> Exterior = [] >>> if 'Porch' in P1: Exterior.append('Porch') >>> if 'Deck' in P1: Exterior.append('Deck') >>> if 'Patio' in P1: Exterior.append('Patio') >>> if 'Fenc' in P1: Exterior.append('Fence') >>> myfile = open(r'D:\python\bpo\act.txt', 'w') >>> myfile.write('%s\t%s\n' % ('Exterior:', Exterior[:])) >>> myfile.close()
Exterior: ['Deck', 'Patio', 'Fence']
Отредактировано Acamori (Апрель 13, 2017 11:08:26)
Офлайн
294
Acamoriделайте join перед запистью
Пока не знаю как убрать скобки, оставив только значения.
>>> a=['1','2'] >>> str(a) "['1', '2']" >>> ','.join(a) '1,2'
[code python][/code]
Отредактировано PEHDOM (Апрель 13, 2017 10:50:55)
Офлайн
1
PEHDOMСпасибо ! Все гениальное - просто
делайте join перед запистью
Буду теперь разбираться с модулем re для выборки более специфичных данных.Отредактировано Acamori (Апрель 13, 2017 11:21:10)
Офлайн
294
Acamoriне совсем понял вопрос, так чтоли?
возможно ли преобразовать только значения словарей ?
>>> a={1:'One',2:'Two',3:'three'} >>> a {1: 'One', 2: 'Two', 3: 'three'} >>> a.values() dict_values(['One', 'Two', 'three']) >>> ', '.join(a.values()) 'One, Two, three' >>>
[code python][/code]
Офлайн
1
PEHDOM
не совсем понял вопрос, так чтоли?>>> a={1:'One',2:'Two',3:'three'} >>> a {1: 'One', 2: 'Two', 3: 'three'} >>> a.values() dict_values(['One', 'Two', 'three']) >>> ', '.join(a.values()) 'One, Two, three' >>>
Не знал что с помощью .join можно так. Думал работает только со списками.Офлайн
294
Acamoriтак dict.values() b возвращает список значений в словаре.
Думал работает только со списками.
[code python][/code]
Офлайн
1
PEHDOM
так dict.values() b возвращает список значений в словаре.
dict_values(['One', 'Two', 'three'])
Офлайн
1
Решил апнуть темку, что б не создавать новую. Хотелось бы услышать мнение по поводу возможности оптимизации кода.
Все из тех же PDF будут вытягиваться цифровые значения в виде строк, оттуда удаляется ненужный символ ',' и с помощью .join они будут собираться/отправляться в виде строк дальше. Но появилась потребность в округлении значений.
Правило округление вполне простое 2345 = 2300, 2567 = 2600, 987 = 1000, 935 = 900
Моих знаний пока хватило для такого способа:
>>>A = '1,356' >>>Ab = list(A) >>>if ',' in Ab: Ab.remove(',') >>>if len(Ab) == 4: if int(Ab[1]) == 9: if int(Ab[2]) >= 5: Ab[0] = int(Ab[0]) + 1 Ab[1] = '0' Ab[2] = '0' Ab[3] = '0' Ab[0] = str(Ab[0]) else: Ab[2] = '0' Ab[3] = '0' else: if int(Ab[2]) >= 5: Ab[1] = int(Ab[1]) +1 Ab[2] = '0' Ab[3] = '0' Ab[1] = str(Ab[1]) else: if len(Ab) == 3: if int(Ab[0]) == 9: if int(Ab[1]) >= 5: Ab[0] = int(Ab[0]) + 1 Ab[1] = '0' Ab[2] = '0' Ab[0] = str(Ab[0]) else: Ab[1] = '0' Ab[2] = '0' if int(Ab[1]) >= 5: Ab[0] = int(Ab[0]) + 1 Ab[1] = '0' Ab[2] = '0' Ab[0] = str(Ab[0]) else: Ab[1] = '0' Ab[2] = '0' >>>A = ''.join(Ab) '1400'
>>>A = '978' >>>Ab = list(A) >>>if ',' in Ab: Ab.remove(',') >>> if ........... >>>Ab '['10','0','0'] >>>A = ''.join(Ab) >>>A '1000'
Отредактировано Acamori (Апрель 14, 2017 14:24:39)
Офлайн