メモ書き:ファイル関連(os,tarfile,glob)

import os

0:前書き

今回のメモ書きはosについて。まあこのモジュールのせいで船井はpythonまじめに調べてみようって思ったんですよ。
DDLCっていうどこぞのやべーゲームにこれ使ったなんやかんやなんやかんやがあったせいでpython触っちゃったんだよ。別にpythonじゃなくたってできる?そりゃそうでしょうね。

1:os.remove("sayori.chr")でSayoriちゃん消したりいろいろする

sayonara.mp3
ファイルを削除するとき

os.remove(ファイル名)

ファイルの名前を変える時

os.rename(旧ファイル名,新ファイル名)

ディレクトリを作るとき

os.mkdir(ディレクトリ名)

ディレクトリを中身もろともと消す

import shutil
shutil.rmtree(ディレクトリ名)

空のディレクトリを削除

target_dir = "./LustRun-Data/tweet"
dirs = glob.glob(f'{target_dir}/**/', recursive=True)

for dir in dirs:
    try:
        os.removedirs(dir)
        print(f'Removed : {dir}')
        cnt += 1
    except OSError:
        pass

2:os.pathで確認ヨシ!する

存在確認ヨシ!

os.path.exists(ファイルorディレクトリ名)
os.path.isdir(ディレクトリ名)
os.path.isfile(ファイル名)

ファイル名確認ヨシ!
dirnameの方はパスのファイル名以外を返す

os.path.basename(パス)	
os.path.dirname(パス)

3:環境変数

書き込み(または上書き)
getenvは存在してなければdefaultを返す。os.environ.get()で取得

os.environ["環境変数"] = "追加する環境変数"
os.getenv("環境変数",default)
os.environ.get("環境変数")
del os.environ["削除する環境変数"]

4:monikaに呼んでもらう例のアレ

なお公式ドキュメントにはgetpass.getuser()のが便利って言われている。

os.getlogin()
getpass.getuser()

5:ファイル一覧を返してもらう

l = glob.glob('[任意]/*.mp4')

↑これでよくない?なんで駄目だったんだっけ?
↑これだと、下層フォルダの中は探索されない?

import os
path = パス名

files = os.listdir(path)
サブフォルダー内まで探して、拡張子が特定のファイルだけをリストアップするもの

recursive に True を指定し、 pathname の中に ** を含めればいい

import glob
for f in glob.glob("./**/*.*", recursive=True):
    print(f)
def extension_list(path,extension):
    import os
    def FileList(path):
        files = []
        D = os.listdir(path)
        for d in D:
            path2 = path + "\\"+ d
            if os.path.isfile(path2):
                files.append(path2) 
            elif os.path.isdir(path2):
                f = FileList(path2)
                files.extend(f)
        return files

    fl = FileList(path)
    R = []
    for file in fl:
        root, ext = os.path.splitext(file)
        if ext == r"." + extension:
            R.append(file)
    return R

6:ファイルの圧縮&解凍

import tarfile
with tarfile.open('sample.tar.gz', 'w:gz') as t:
    t.add('sample_dir')

「例えば絶対パスで圧縮すると、そこに至るまでのフォルダごと圧縮する感じになる。」(これ多分船井にすら伝わらないので言い換えを考える)

import tarfile
with tarfile.open('sample.tar.gz', 'r:gz') as t:
    t.extractall(path='sample_pg')

7:カレントディレクト

os.getcwd()

8:ディレクトリを作る

os.mkdir(new_dir)
os.makedirs(new_dir)

どちらも、既にそのディレクトリが存在しているとFileExistsErrorが発生する。
また、os.mkdir()ではまだ存在していないディレクトリの中に新たなディレクトリを作成する場合はFileNotFoundErrorが発生する。

os.mkdir(new_dir,exist_ok)

とするとFileExistsErrorにならないらしい。

99:あとがき

正直osモジュールってなんかめーーーーーーっちゃいろいろあるんだよね☆
必要ならまたいつか書くはず。使うかなぁ。
271108.hatenablog.com