実現したいこと
Excelを読み込んでtsvファイルに変換するコードを作成しています。
Excelの各セルの内容は編集せずにそのままtsvファイルに変換する処理を行いたいです。
どなたかご教授いただければ幸いです。
発生している問題・分からないこと
変換元のExcelの列の日付の項目に9999/12/31のような日付が入っていると、YYYY-MM-DD hh:mm:ssのタイムスタンプ形式で変換されてしまいます。通常の2001/01/01のような日付のみの列はYYYY/MM/DDで変換されています。
変換前(Excel)
ID | 開始日 | 終了日 |
---|---|---|
A | 2023/01/01 | 9999/12/31 |
A | 2023/01/01 | 2014/02/02 |
変換後(タブ区切り形式のファイル)
ID | 開始日 | 終了日 |
---|---|---|
A | 2023/01/01 | 9999-12-31 00:00:00 |
A | 2023/01/01 | 2014-02-02 00:00:00 |
デバッグで確認したところ、9999/12/31の列はタイムスタンプ型で読み込んでいるところまで確認できました。
該当のソースコード
Python
1import os 2from tkinter import Tk, filedialog, messagebox 3import pandas as pd 4import csv 5 6 7def select_folder(): 8 root = Tk() 9 root.withdraw() # メインウィンドウを表示しないようにする 10 folder_path = filedialog.askdirectory(title="フォルダを選択してください") 11 12 if folder_path: 13 convert_excel_to_tsv(folder_path) 14 15 16def convert_excel_to_tsv(folder_path): 17 try: 18 files = os.listdir(folder_path) 19 20 for file in files: 21 if file.endswith(".xlsx"): 22 excel_path = os.path.join(folder_path, file) 23 tsv_name = os.path.splitext(file)[0] + ".tsv" 24 tsv_path = os.path.join(folder_path, tsv_name) 25 26 # ExcelファイルをDataFrameとして読み込む 27 df = pd.read_excel(excel_path,engine="openpyxl") 28 29 # DataFrameをタブ区切りのTSVファイルとして保存する 30 df.to_csv(tsv_path, sep='\t', index=False, encoding='utf-8', quoting=csv.QUOTE_NONE) 31 32 #print(f'Converted Excel to TSV: {file} -> {tsv_name}') 33 34 messagebox.showinfo('メッセージ', '処理が完了しました。ExcelファイルをTSVファイルに変換しました。') 35 36 except Exception as e: 37 print(str(e)) 38 messagebox.showinfo(f'エラーが発生しました: {str(e)}') 39 40 41if __name__ == "__main__": 42 select_folder() 43
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
- pythonではUNIXの時間の扱いで2038年までしか日時を扱えないという事象までは確認しました。
対応策まで勘案できていない状態です
- read_excelのdtypeをstrで行う方式も試しましたが、日付の列がすべてタイムスタンプ型になってしまい、断念しました
補足
Python 3.11
pandas 2.2.1
openpyxl 3.1.2
numpy 1.26.3

回答1件
あなたの回答
tips
プレビュー