LoginSignup
5
5

More than 5 years have passed since last update.

自作のPythonプログラムをパッケージに追加して使用する

Last updated at Posted at 2018-02-25

お礼
私は、まだ一から作成することが出来ないので、皆様が作成したプログラムを流用して作成しています。ありがとう御座います。

環境

  Ubuntu Studio 17.10
  LibreOffice6.0

  Ubuntu
  Python 3.6.3(64bit)

  LibreOffice 6.0
  Python 3.5.4(64bit)

パッケージの追加

郵便局のサイトから郵便番号のcsvデータをダウンロードして、
https://www.craneto.co.jp/archives/1309/
上記のサイトでcsvの読み込み方を勉強していたのですが、csvファイルがshift_jisでubuntuはutf-8なのでエンコードを指定しなくてはいけません。

上記のサイトに、文字コード判定のモジュールをimport getencと書いてあるのですが、インストールされていないので、pip3 install getencとしてもありません。

ネットで探していたら、
http://myfuturesightforpast.blogspot.jp/2015/01/auto-detecting-japanese-file-enconding.html
上記のサイトに、文字コードの自動判定関数getenc.pyがありました。

これを少し修正して、文字コードの自動判定パッケージgetenc.pyとして、'/home/ty/.local/lib/python3.6/site-packages'に保存しました。

https://qiita.com/ty21ky/items/3b944a7abe23e3bcaf8f
上記のブログでLibreOfficeのバンドルPythonにもパスを追加しているので、Ubuntuのpython3とLibreOfficeバンドルのPython3の両方で文字コードの自動判定パッケージを使用出来るようになりました。

getenc.py
#!/usr/bin/python3
# (File name: getenc.py)
# Lincense: CC0
#http://myfuturesightforpast.blogspot.jp/2015/01/auto-detecting-japanese-file-enconding.html
#使い方
# $ ./getenc.py 27OSAKA.CSV
# $ ./getenc.py Text.txt
#使い方(呼び出す場合)
#from getenc import getEncode
#
#getEncode(ファイル名)

#文字コードの自動判定関数
def getEncode(filepath):
    encs = "iso-2022-jp euc-jp shift_jis utf-8".split()
    for enc in encs:
        with open(filepath, encoding=enc) as fr:
            try:
                fr = fr.read()
            except UnicodeDecodeError:
                continue
        return enc

if __name__ == '__main__':

    import sys

    argv = sys.argv
    argc = len(argv)
    hikisuu = 1

    if argc <= hikisuu:
        print ("文字エンコードを調べるテキストファイル名を1つを引数として指定します。")
        print ("使い方")
        print ("$ ./getenc.py テキストファイル.CSV(txt)")
    else:
        FR = argv[1]
        print(getEncode(FR))

これを呼び出すサンプルプログラム

TestGetEncode.py
from getenc import getEncode

print(getEncode('/media/ty/HD-LCU3/Post/data/27OSAKA.CSV'))
test
$ python3 TestGetEncode.py
shift_jis
$ /opt/libreoffice6.0/program/python ./TestGetEncode.py
shift_jis

割と簡単にパッケージを自作することができました。(まだ、プログラムを作ることが出来ないのは寂しいですが。)

https://www.craneto.co.jp/archives/1309/
Python3 で CSV の読み書きをする方法 – Shift_JIS と UTF-8 対応サンプルコード付

上記のサイトを参考にしてというか、ほとんどそのままですが郵便番号のCSVファイルを読み込むプログラムです。

csv_open_getEncode.py
#Python3 標準モジュール csv のインポート
import csv

# getenc モジュールをインポート
from getenc import getEncode

try:
    CSVFILE = '/media/ty/HD-LCU3/Post/data/27OSAKA.CSV'
    # 文字コードが不明な場合
    enc = getEncode(CSVFILE)
    with open(CSVFILE, 'r', encoding=enc) as csvfile:
        csv_reader = csv.reader(csvfile, delimiter=',', quotechar='"')
        for row in csv_reader:
            print(','.join(row))

# 起こりそうな例外をキャッチ
except FileNotFoundError as e:
    print(e)
except csv.Error as e:
    print(e)
test
$ python3 csv_open_getEncode.py
........
27383,585  ,5850053,オオサカフ,ミナミカワチグンチハヤアカサカムラ,コブキ,大阪府,南河内郡千早赤阪村,小吹,0,0,0,0,0,0
27383,585  ,5850041,オオサカフ,ミナミカワチグンチハヤアカサカムラ,スイブン,大阪府,南河内郡千早赤阪村,水分,0,0,0,0,0,0
27383,585  ,5850051,オオサカフ,ミナミカワチグンチハヤアカサカムラ,チハヤ,大阪府,南河内郡千早赤阪村,千早,0,0,0,0,0,0
27383,585  ,5850052,オオサカフ,ミナミカワチグンチハヤアカサカムラ,ナカツハラ,大阪府,南河内郡千早赤阪村,中津原,0,0,0,0,0,0
27383,585  ,5850042,オオサカフ,ミナミカワチグンチハヤアカサカムラ,ニガラベ,大阪府,南河内郡千早赤阪村,二河原辺,0,0,0,0,0,0
27383,585  ,5850044,オオサカフ,ミナミカワチグンチハヤアカサカムラ,モリヤ,大阪府,南河内郡千早赤阪村,森屋,0,0,0,0,0,0
27383,585  ,5850054,オオサカフ,ミナミカワチグンチハヤアカサカムラ,ヨドシ,大阪府,南河内郡千早赤阪村,吉年,0,0,0,0,0,0
その他の参考にしたサイト

Pythonで自作モジュールを手軽に使う
https://qiita.com/Accent/items/efb57d66309f6c0ee63d

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5