'21/08/01更新
本記事では、ファイルやフォルダの頻出操作19の雛形コードを載せました。
1. フォルダパスやファイルパスをos.path.join()で作成する方法
2. 逆に、ファイルパスやファイル名をos.path.filename()で取得する方法
3. ファイルの操作関連
・ファイルやフォルダをコピーや削除する方法 shutil.copy2(,) shutil.rmtree()
・フォルダ内を再帰的に探索する方法 os.walk()
・ファイル名をリストで取得 glob.glob('./*.csv')
・ファイルリストをソートする
・フォルダをzip圧縮する。解凍(展開)する。
本コードの実行例は下図の通りです。

■本プログラム
import os
import shutil
import glob
import re
import datetime
now = datetime.datetime.now()
now = now.strftime("%y%m%d")
def main():
current_path = os.getcwd()
print(1, current_path)
filename = now + '_file.csv'
dirpath_list = [current_path, 'sub_dir']
dirpath = os.path.join(*dirpath_list)
print(2, dirpath)
os.mkdir(dirpath)
filepath = os.path.join(dirpath, filename)
print('4_1', filepath)
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)
dirname = os.path.dirname(filepath)
print(5, dirname)
subdirname = os.path.basename(os.path.dirname(filepath))
print(6, subdirname)
filename = os.path.basename(filepath)
print(7, filename)
num = filename.rfind('.')
filename = filename[:num]
print(8, filename)
dirpath, filename = os.path.split(filepath)
print(9, dirpath, filename)
shutil.copy2(filepath, current_path)
shutil.copytree(dirpath, dirpath + '_backup')
shutil.rmtree(dirpath)
print(13, os.path.isfile(filepath))
print(13, os.path.isdir(dirpath + '_backup'))
print('15')
for dirpath, dirnames, fnames in os.walk(os.getcwd()):
print('dirpath:' ,dirpath)
print('dirnames:' ,dirnames)
print('fnames:' ,fnames)
file_names = glob.glob('./*.csv')
print(16, file_names)
file_names = sorted(file_names, key=lambda x:int((re.search(r"[0-9]+", x)).group(0)))
print(17, file_names)
shutil.make_archive('csv_files', 'zip', root_dir = dirpath)
shutil.make_archive('csv_files.zip', extract_dir = '.')
if __name__ == '__main__':
main()
以上
<広告>
リンク