Форум сайта python.su
0
Друзья, всем добра.
я во многом чайник, но хочется сделать одну штуку.
Есть файл rtf либо html. в этом файле кучка информации, в том числе в виде таблиц.
Хочется через питон по заранее известному тэгу найти строчку в этом файле и взять из нее число.
Сделать эту задачу с ТХТ-файлами получилось довольно легко.
А вот на RTF и HTML затормозил.
В чем здесь фишка? нужно ли использовать какие-то дополнительные библиотеки или модули? Можно ли обращаться к этим файлам так же, как и к ТХТ?
Мой код для ТХТ вот:
[
from __future__ import print_function
import io
noWord='Нет cовпадений'
word = u'рпы'
with io.open('L:/file.docx', encoding='cp1251') as file:
for line in file:
if word in line:
print(line, end='')
[int(s) for s in line.split() if s.isdigit()]
#int(aa)
print(s)
else:
print(noWord.decode('utf-8'))
input()]
Офлайн
253
lexa24
А вот на RTF и HTML затормозил.
lexa24Вы определитесь какой у вас формат файлов. rtf, doc, docx совершенно разные вещи.
with io.open('L:/file.docx', encoding='cp1251') as file:
lexa24Если коротко то нет.
обращаться к этим файлам так же, как и к ТХТ?
lexa24Фишка в том, что файлы rtf, doc, docx, html содержат в основном данные о красивом оформлении абзацев и цветах буковок, поэтому найти собственно данные непросто.
В чем здесь фишка?
Отредактировано doza_and (Дек. 27, 2015 15:44:04)
Офлайн
0
doza_andДа, там в коде docx - это я играть пытался с ним) Там должен быть ТХТ - исходник с него был снят
Офлайн
253
Удобнее всего общаться со стандартными форматами например csv для таблиц. Ну или текстовым файлом.
(вы ведь для него написали уже обработчик :) ).
для docx есть довольно удобный https://python-docx.readthedocs.org/en/latest/. Наверное будет примерно одинаково сложно сохранить docx как текст и распарсить как вы уже делали, или вытащить данные при помощи python-docx.
p.s.
если вам нужны данные, причем в понятном для человека виде, и вы вольны сами выбирать формат, то лучше использовать форматы csv, json, yaml. Окончательный выбор зависит от структуры данных.
Отредактировано doza_and (Дек. 27, 2015 20:07:01)
Офлайн
0
doza_and
лучше использовать форматы csv, json, yaml. Окончательный выбор зависит от структуры данных.
Офлайн
253
html однозначно лучше чем rtf.
Маленький совет по технологии. Вообще html это текстовый файл. Вы можете посмотреть его внутреннее устройство при помощи текстового редактора (конечно не ворда ну чтото типа notepad++).
Если вытаскивать надо небольшие кусочки, то часто используют регулярные выражения см модуль re
Офлайн
0
doza_and
html однозначно лучше чем rtf.Маленький совет по технологии. Вообще html это текстовый файл. Вы можете посмотреть его внутреннее устройство при помощи текстового редактора (конечно не ворда ну чтото типа notepad++).Если вытаскивать надо небольшие кусочки, то часто используют регулярные выражения см модуль re
from __future__ import print_function from bs4 import BeautifulSoup from urllib2 import urlopen import io #ПЕРЕВОД ИЗ HTML В ТХТ html_doc = urlopen('file:///L:/File.html').read() soup = BeautifulSoup(html_doc) #print html_doc f=open(r"L:\File2.txt",'w') f.write(str(soup)) f.close #СФОРМИРОВАН ФАЙЛ File2.txt, СОДЕРЖАЩИЙ СТРУКТУРИРОВАННЫЙ КОД ДОКУМЕНТА HTML #ПОИСК ЗНАЧЕНИЯ В ФАЙЛЕ ТХТ #noWord='Нет cовпадений' word = u'<td>Напряжение по Мизесу</td>' with io.open('L:/File2.txt', encoding='utf-8') as file: for line in file: if word in line: print(line, end='') [int(s) for s in line.split() if s.isdigit()] #int(aa) print(s) #else: #print(noWord.decode('utf-8')) input()
Отредактировано lexa24 (Дек. 31, 2015 11:05:56)
Офлайн
253
lexa24Неправильно поняли.
это удобно делать через РегЭксп
f=open(r"L:\File2.txt",'w') f.write(str(soup)) f.close() word = u'<td>Напряжение по Мизесу</td>' with io.open('L:/File2.txt', encoding='utf-8') as file: for line in file: if word in line: print(line, end='') [int(s) for s in line.split() if s.isdigit()]
import re print(re.findall("....",soup))
Офлайн
0
doza_and
Все это :
f=open(r“L:\File2.txt”,'w')
f.write(str(soup))
f.close()
word = u'<td>Напряжение по Мизесу</td>'
with io.open('LFile2.txt', encoding='utf-8') as file:
for line in file:
if word in line:
print(line, end='')
с регулярными выражениями не нужно.
Офлайн
0
doza_andНу в целом вроде нашел способ.
)#noWord='Нет cовпадений' word = u'<td>Напряжение по Мизесу</td>' with io.open('L:/File2.txt', encoding='utf-8') as file: for line in file: i=i+1 if word in line: print(line, end='') break #else: #print(noWord.decode('utf-8')) print(i) i=i+2 napr=linecache.getline("L:\File2.txt",i) print (napr) input()
Офлайн