正規表現での抽出を参考にColaboratoryで実行
!apt-get install openjdk-11-jre !curl -OL https://www-eu.apache.org/dist/pdfbox/2.0.16/pdfbox-app-2.0.16.jar !curl -OL https://cashless.go.jp/assets/doc/kameiten_touroku_list.pdf !java -jar pdfbox-app-2.0.16.jar ExtractText -startPage 3 -sort -encoding UTF-8 kameiten_touroku_list.pdf
- 9月6日用にタイトル修正
- ブラウザが固まってしまってスプレッドシートに貼り付けできない
import csv import re # 保存データの種類 save = [1, 2, 3, 4] with open('result.tsv', 'w', encoding="utf-8") as fw: writer = csv.writer(fw, dialect=csv.excel_tab, lineterminator='\n') with open('kameiten_touroku_list.txt', mode='rt', encoding="utf-8") as fr: mode = 0 for line in fr: line = line.strip() # タイトル確認 if line.startswith("②固定店舗"): mode = 1 elif line.startswith("③EC・通信販売(楽天市場)"): mode = 2 elif line.startswith("④EC・通信販売(Yahoo!ショッピング)"): mode = 3 elif line.startswith("⑤EC・通信販売(その他ECサイト)"): mode = 4 # 行末に%のみ抽出 if line.endswith("%"): # 市区町村と事業所名を分離 文字オーバーの場合結合されてしまうため # line = re.sub(r'(埼玉県 さいたま市(大宮|見沼|中央|浦和|岩槻)区)(?! )', r'\1 ', line) # line = re.sub(r'(神奈川県 横浜市保土ケ谷区)(?! )', r'\1 ', line) # line = re.sub(r'(福岡県 北九州市(小倉北|小倉南|八幡東|八幡西)区)(?! )', r'\1 ', line) # 保存条件 if mode in save: # 固定店舗 if mode == 1: regexp = r"([\d,]+) ([^ ]+) ([^ ]+) (.+) ([^ ]+) ([^ ]+) (\d+%)$" m = re.search(regexp, line) if m: writer.writerow(m.groups()) else: print(line) # EC・通信販売 elif mode in [2, 3, 4]: regexp = r"([\d,]+) (.+) (\d+%)$" m = re.search(regexp, line) if m: writer.writerow(m.groups()) else: print(line)
import csv import re regxp1 = re.compile( r"(^\d{1,3}(,\d{3})?)\s(\S{2,3}(都|道|府|県))\s+(\S{1,7}(市|区|町|村))\s+(.+)\s+(\S+)\s+(\S+)\s+([2|5]%)$" ) regxp2 = re.compile(r"(^\d{1,3}(,\d{3})?)\s+(.+)\s+([2|5]%)$") # 保存データの種類 save = [1, 2, 3, 4] with open('result.tsv', 'w', encoding="utf-8") as fw: writer = csv.writer(fw, dialect=csv.excel_tab, lineterminator='\n') with open('0905_kameiten_touroku_list.txt', mode='rt', encoding="utf-8") as fr: mode = 0 for cnt, line in enumerate(fr, 1): line = line.strip() # タイトル確認 if line.startswith("②固定店舗"): mode = 1 elif line.startswith("③EC・通信販売(楽天市場)"): mode = 2 elif line.startswith("④EC・通信販売(Yahoo!ショッピング)"): mode = 3 elif line.startswith("⑤EC・通信販売(その他ECサイト)"): mode = 4 # 行末に%のみ抽出 if line.endswith("%"): # 保存条件 if mode in save: # 固定店舗 if mode == 1: m = regxp1.search(line) if m: writer.writerow( [m[i].strip() for i in [1, 3, 5, 7, 8, 9, 10]]) else: print(cnt, line) # EC・通信販売 elif mode in [2, 3, 4]: m = regxp2.search(line) if m: writer.writerow([m[i].strip() for i in [1, 3, 4]]) else: print(cnt, line)