python
#.txt(複数)のファイルのBOMの有無を調べ、
#ディレクトリー'bom'(BOM付き)と'clean'(BOMなし)
#に分けて保存する。
#'bom'と'clean'が存在しない場合は作成し、
#存在する場合には、上書き保存するかを確認する。
import os
import shutil
# テキストファイルのBOMの有無を調べる
def has_bom(file_path):
with open(file_path, 'rb') as f:
first_bytes = f.read(3)
return first_bytes == b'\xef\xbb\xbf'
# ファイルを移動する関数
def move_file(source, destination):
os.rename(source, destination)
# ディレクトリを作成する関数
def create_directory(directory, directory_name):
if os.path.exists(directory):
overwrite = input(f"'{directory_name}' already exists. Do you want to overwrite it? (Y/N): ").strip().lower()
if overwrite != 'y':
print(f"Skipping '{directory_name}' directory creation.")
return
else:
print(f"'{directory_name}' directory will be overwritten.")
shutil.rmtree(directory) # os.rmdir(directory) の代わりに shutil.rmtree(directory) を使用
os.makedirs(directory)
print(f"'{directory_name}' directory created.")
# ディレクトリ内のファイルをチェックして処理する
def process_files(directory):
# 'bom'と'clean'ディレクトリの定義
bom_dir_name = 'bom'
clean_dir_name = 'clean'
bom_dir = os.path.join(os.path.dirname(directory), bom_dir_name)
clean_dir = os.path.join(os.path.dirname(directory), clean_dir_name)
create_directory(bom_dir, bom_dir_name)
create_directory(clean_dir, clean_dir_name)
for filename in os.listdir(directory):
if filename.endswith('.txt'):
file_path = os.path.join(directory, filename)
if has_bom(file_path):
new_file_path = os.path.join(bom_dir, f'bom-{filename}')
move_file(file_path, new_file_path)
print(f'{filename} contains BOM and moved to {bom_dir_name} directory as bom-{filename}')
else:
new_file_path = os.path.join(clean_dir, f'clean-{filename}')
move_file(file_path, new_file_path)
print(f'{filename} does not contain BOM and moved to {clean_dir_name} directory as clean-{filename}')
# テスト用のディレクトリパス
directory_path = os.path.abspath('chcode') # 'chcode' ディレクトリの絶対パスを取得
# ディレクトリ内のファイルを処理する
process_files(directory_path)