タイトルにある通り、テキストデータを辞書型やリスト型に変換したいです。
目的はデータ解析と、自分の作業の効率化のためです。
よろしくお願いします。
#主題1
オフラインにあるhtmlデータをpythonの辞書型に落とし込みたいです。スクレイピングではなく、もう少し小規模なものを考えています。ページのソースを表示してコピペできるくらいの数百の要素数を想定しています。
<td>の中のtitleの属性値fooをkey、<a>で囲まれた文字barをvalueとして扱いたいです。 ```python #どこまで考えたか1html
1<tr> 2<td title="foo">***</td> 3<th><a href="***">bar</a></th> 4<td>***</td> 5</tr> 6 7<!--このような規則性のあるものが数百並んでいるデータを想定-->
info = 'data.txt' #上記htmlの一部をtxtファイルとして保存している想定。
def molding(info):
dict = {}
with open(info) as f:
text = f.read() #文字列として取得
import re
for i in text:
foo = re.match() #titleの属性値をfoo
bar = re.match() #>
と</a>
で囲まれた部分をbarとする
dict['foo'] = 'bar' #追加
f.close()
return dict
#主題2 成分表示 `りんご、みかん, にんじん ,すいか,,レモン ,なす` この文字列をリスト型に変換したいです。 ```python #どこまで考えたか2 txt='りんご、みかん, にんじん ,すいか,,レモン ,なす' def transform(txt): l=[] txt.replace(' ' , '').replace(' ' , '').replace('、' , ',').replace(',,' , ',') # txt='りんご,みかん,にんじん,すいか,レモン,なす' import re for m in txt: m = re.match('[\u3041-\u3096 | \u30A1-\u30FF]'+, txt) #先頭から一語をmとする # IndentationError: ecpected an indented block l.append(m) #リストに入れる txt.replace(m , '').replace(',' , '') #txtの先頭から一語とカンマ1つを消す print (l) # ["''", "''", "''", "''", "''", '', '', '', '', '', '']
##つまり、わからないこと
- 主題1をどう書き直せばいいか
- 主題2をどう書き直せばいいか
- 正規表現でどのようにひらがなカタカナ漢字Alphabet数字を指定すればいいのか
###関連ありそうだな~と調べたことメモ
- Beautiful Soup 4でも
soup.find_all('a')
すればbarの部分は抽出できるらしいので、pythonでできないということはないはず。 html.parser
を使用?- pandasやテキストマイニングはたぶん関係ない。でもたぶんオフラインデータを扱える?
- 記号&空白で分割してgoogleスプレッドシートに落とし込んでから、そこで成型してpythonのデータ型に変換する。→たぶん同じところで躓く&より知識不足
- EXCELのマクロでもCSVなどの整ったデータのみ?
- pythonの辞書をhtmlにするという逆のことはできるらしい。Flaskを使用
- 行ごとに分割してリストにするなら
readlines()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/13 09:55
退会済みユーザー
2020/12/13 10:52 編集
2020/12/13 12:08