'21/08/01更新
本記事では、ファイルやフォルダの頻出操作19の雛形コードを載せました。
1. フォルダパスやファイルパスをos.path.join()で作成する方法
2. 逆に、ファイルパスやファイル名をos.path.filename()で取得する方法
3. ファイルの操作関連
・ファイルやフォルダをコピーや削除する方法 shutil.copy2(,) shutil.rmtree()
・フォルダ内を再帰的に探索する方法 os.walk()
・ファイル名をリストで取得 glob.glob('./*.csv')
・ファイルリストをソートする
・フォルダをzip圧縮する。解凍(展開)する。
本コードの実行例は下図の通りです。
■本プログラム
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import shutil import glob import re import datetime now = datetime.datetime.now() now = now.strftime("%y%m%d") def main(): # 1. カレントディレクトリのパスを取得 current_path = os.getcwd() print(1, current_path) filename = now + '_file.csv' # ファイル名の作成 ##### ファイルやフォルダのパスを作成する # 2. ディレクトリパスの作成 dirpath_list = [current_path, 'sub_dir'] dirpath = os.path.join(*dirpath_list) print(2, dirpath) # 3. ディレクトリの作成 os.mkdir(dirpath) # 4. ファイルパスの作成その1:ディレクトリパス+ファイル名 filepath = os.path.join(dirpath, filename) print('4_1', filepath) # 4. ファイルパスの作成その2:ディレクトリパス+サブディレクトリ名+ファイル名 filepath_list = [os.getcwd(), 'sub_dir', filename] filepath_2 = os.path.join(*filepath_list) print('4_2', filepath_2) # ファイルを作成する例 data_list = [1, 2, 3, 4, 'abc'] str_list = list(map(str, data_list)) # リスト内の要素を文字型へ変換 str_list = '\n'.join(str_list) # 各要素に改行コードを付与 with open(filepath, 'w', encoding='utf-8') as f: for row in str_list: f.write(row) ##### ファイルやフォルダパスから名前を取得する # 5. ディレクトリ名の取得 dirname = os.path.dirname(filepath) print(5, dirname) # 6. サブディレクトリ名の取得 subdirname = os.path.basename(os.path.dirname(filepath)) print(6, subdirname) # 7. ファイル名を取得(拡張子有り) filename = os.path.basename(filepath) print(7, filename) # 8. ファイル名を取得(拡張子なし) num = filename.rfind('.') filename = filename[:num] print(8, filename) # 9. ディレクトリパスとファイル名を同時に取得 dirpath, filename = os.path.split(filepath) print(9, dirpath, filename) ##### ファイルやフォルダを操作する # 10. ファイルをコピーする shutil.copy2(filepath, current_path) # 11. フォルダを中身ごとコピーする shutil.copytree(dirpath, dirpath + '_backup') # 12. フォルダをサブフォルダやファイルなどの中身ごと削除 shutil.rmtree(dirpath) # 13. ファイルの存在を確認 print(13, os.path.isfile(filepath)) # 14. フォルダの存在を確認 print(13, os.path.isdir(dirpath + '_backup')) # 15. フォルダ内を再帰的に探索する print('15') for dirpath, dirnames, fnames in os.walk(os.getcwd()): print('dirpath:' ,dirpath) print('dirnames:' ,dirnames) print('fnames:' ,fnames) # 16. 指定フォルダ内を正規表現で、複数のファイル名をリストで取得 file_names = glob.glob('./*.csv') print(16, file_names) # 17. ファイルリストを番号順にソートする。reモジュールを利用する file_names = sorted(file_names, key=lambda x:int((re.search(r"[0-9]+", x)).group(0))) print(17, file_names)
# 18. フォルダを圧縮する。引数は順に、(圧縮後ファイル名、圧縮フォーマット、フォルダパス)
shutil.make_archive('csv_files', 'zip', root_dir = dirpath)
# 19. フォルダを解凍する。引数は順に、(圧縮ファイル名、解凍先)
shutil.make_archive('csv_files.zip', extract_dir = '.')
if __name__ == '__main__': main()
以上
<広告>
リンク