Python リファレンス

インストール済みパッケージの共有

インストール済みパッケージをファイル化

pip freeze > requirements.txt

インストールしているモジュールがリスト化された requirements.txt ファイルが生成される。

文字列処理

末尾の削除 | .rstrip

a = "ABC-AB"
b = a.rstrip("AB")
print(b) # ABC-

前頭一致 | .startswith

rtn = 'python'.startswith('p')
print(rtn)

末尾一致 | .endswith

rtn = 'python'.endswith('a')
print(rtn)

文字列の中にで指定した文字列が存在するインデックスをすべて取得する

# 文字列の中に、指定した文字列が存在するインデックスをすべて取得する
def get_index_list(self, targetText, str):
    index = -1
    indes_list = []
    while True:
        index = targetText.find(str, index + 1)
        if index == -1:
            break
        #print(index)
        indes_list.append(index)
   return indes_list

リスト処理

リストの重複を削除する | 二次元配列

# リストの重複を削除する
def get_unique_list(seq):
    seen = []
    return [x for x in seq if x not in seen and not seen.append(x)]

ディレクトリ / ファイル

パス / 拡張子

ディレクトリの作成

# ディレクトリの作成
os.makedirs(path)

拡張子の取得

# 拡張子を小文字で取得
extension = os.path.splitext(path)[1].lower()

.lower() で強制的に小文字に変換

拡張子抜きのファイル名

# 拡張子抜きのファイル名
file_name_without_extension = os.path.splitext(os.path.basename(filePath))[0]

ファイル名とフォルダ名のペアを取得

path_info = os.path.split()
dir_path = path_info [0]
file_name = path_info [1]

実行しているファイルのパスを取得する

launch_file_path =  __file__

ユーザーディレクトリの取得

user_path = os.getenv("HOMEDRIVE") + os.getenv("HOMEPATH")

ディレクトリ内にあるすべての層のアイテムをリスト化

def get_all_itemList_indirectory(dirPath):
    found = []
    for root, dirs, files in os.walk(dirPath):

        # ファイルを追加
        #-----------------------------------------------------------------------
        for filename in files:
                found.append(os.path.join(root, filename))

        # フォルダを追加
        #-----------------------------------------------------------------------
        for dirname in dirs:
            found.append(os.path.join(root, dirname))

    return found

glob モジュール

標準ライブラリのためインストール不要。
条件を満たすファイル名やディレクトリ名などのパスの一覧を取得する。

ワイルドカード検索

import glob

# test 階層にある全ての png データのファイルパスがリストに格納される
png_list_1 = glob.glob('test/*.png')
print(png_list_1) #-> ['test\\00000.png', 'test\\00001.png', 'test\\00002.png', 'test\\00003.png', 'test\\00004.png', 'test\\00005.png']


# 0 から始まって 5 で終わる png ファイル
png_list_2 = glob.glob('test/0*5.png')
print(png_list_2) #-> ['test\\00005.png']

特定の文字で検索

import glob

# ?
# ファイル名が 3文字の png ファイル
png_list_1 = glob.glob('test/???.png')
print(png_list_1)

# [0-9]
# 2桁の数字名のファイルで 1桁目が 4以下
png_list_2 = glob.glob('test/[0-9][0-4].png')
print(png_list_2)

# [a-z]
# 3文字の英字名のファイル
png_list_3= glob.glob('test/[a-z][a-z][a-z].png')
print(png_list_3)

サブディレクトリも検索 | recursive

recursive=True を渡すことで** の部分でサブディレクトリも検索するようになる。

※ Python 3.5 以降

import glob

# test 階層以下にあるサブディレクトリを含めた
# 全ての png データのファイルパスがリストに格納される
png_list = glob.glob('test/**/*.png', recursive=True)

print(png_list)

文字コード

ファイルの文字コードを取得

import chardet

with open(csv_file_path, 'rb') as f:
    binary_file = f.read()

_encode = chardet.detect(binary_file)
encode = _encode['encoding']

print(_encode)
print(encode)
{'encoding': 'SHIFT_JIS', 'confidence': 0.7785388127853882, 'language': 'Japanese'}
SHIFT_JIS

ファイルの実行

.lnk ファイルの元を取得

pip install pywin32
import win32com.client
wshell = win32com.client.Dispatch("WScript.Shell")
shortcut = wshell.CreateShortcut(item_path)
item_path = shortcut.TargetPath

既定のプログラムでファイルを実行

subprocess.Popen(['start', item_path], shell=True)

exe ファイルの実行

subprocess.run(item_path)

ダブルクリックでファイルを実行する

'''

ダブルクリック
--------------------------------------------------------------------------------------------------------------------
'''
def double_clicked(self):

    path = self.path_Line.text()
    item = self.item_listWidget.selectedItems()[0].text()

    item_path = path + '\\' + item


    # 実行したのがファイルの場合
    # ==============================================================================================================
    if os.path.isfile(item_path):

        extention = os.path.splitext(item_path)[1].lower()

        if not extention in settings.RELIANCE_FILES:

            # ショートカットファイルの場合はリンク元のパスを取得
            # ------------------------------------------------------------------------------------------------------
            if extention == '.lnk':

                if settings.ENVIRONMENT == 'standalone':
                    wshell = win32com.client.Dispatch("WScript.Shell") #<COMObject WScript.Shell>
                    shortcut = wshell.CreateShortcut(item_path)
                    item_path = shortcut.TargetPath
                    extention = os.path.splitext(item_path)[1].lower()

                else:
                    return


            # exe ファイルの場合
            # ------------------------------------------------------------------------------------------------------
            if extention == '.exe':
               subprocess.run(item_path)

            else:
                subprocess.Popen(['start', item_path], shell=True)

json ファイル操作

書き込み

def write(text):
    with open('test.json', 'w') as f:
        f.write(text)

write('test')