概要
Excelファイルを一括txt化するPythonを作成したので、備忘録としておいておきます。
これはWSL2で使用したものです。
path: 下のフォルダを格納するフォルダまでのパス
folder_source: excelファイル格納フォルダ名
folder_result: 出力先フォルダ名
excelToCsv.py
import os
from natsort import natsorted
import pandas as pd
import warnings
#ディレクトリ名
folder_source = "source"
folder_result = "result"
#パス
path = "/home/user/code/python/"
def main():
folder_source_path = os.path.join(path, folder_source)
folder_result_path = os.path.join(path, folder_result)
#excelファイルリストを生成
files = natsorted(os.listdir(folder_source_path))
#入力規則が保存できない警告が出るが、xlsxで保存しないため無視する
warnings.filterwarnings('ignore', category=UserWarning)
#ファイルリスト
for filename in files:
filepath = os.path.join(folder_source_path, filename)
sheet_names = pd.ExcelFile(filepath).sheet_names
#各シート
for sheet_name in sheet_names:
data = pd.read_excel(filepath, sheet_name, index_col=None)
output_file_name = sanitize_filename(filename + "_" + sheet_name + ".txt")
#出力
data.to_csv(os.path.join(folder_result_path, output_file_name), encoding="UTF-8", index=False)
#コンソールに経過を出力
print("{:>2}".format(len(sheet_names)) + ": " + filename)
print("Finish!")
#ファイル名に使用できないシート名を置換
def sanitize_filename(filename):
#ファイルパスに使用できない文字リスト
invalid_chars = [":", "/", "\\", "*", "?", "\"", "<", ">", "|"]
for char in invalid_chars
filename = filename.replace(char, "_")
return filename
if __name__ == "__main__":
main()
終わりに
複数のExcelファイルを検索するなら、txt化してからGrep検索が基本ですね。