フォルダの中から、名付けルールに沿ってないファイル名探すのダルいなあ。
ChatGPT ちゃんに頼むか。
わたし:
フォルダの中に、「[伝票番号]支払先_mmdd_支払金額」という形式のファイル名を持つファイルがたくさん入っています。なお、「支払先」以外の3項目はすべて数値です。
これらのファイルのうち、以下の条件をすべて満たすファイル名を抽出するPython コードを書いてください。
1. ファイル名に「なし」という文字列がない
2. ファイル名が「[伝票番号]」で始まる(「伝票番号」の部分には数字が入る
3. mmddがファイル名から抜けている(「mmdd」は日付を示す4ケタの数字)
ChatGPTちゃん:
以下がPythonコードになります。フォルダのパスと条件に応じたファイル名のリストが返されます。
import os
# フォルダのパス
folder_path = "path/to/folder"
# ファイル名を格納するリスト
file_list = []
# フォルダ内のファイルを順に取得
for file_name in os.listdir(folder_path):
# ファイル名に「なし」という文字列がなく、かつ伝票番号で始まるファイルのみ抽出
if "なし" not in file_name and file_name.startswith("[") and file_name.find("]") != -1:
# 伝票番号を取得
start_index = file_name.find("[") + 1
end_index = file_name.find("]")
denpyo_no = file_name[start_index:end_index]
# 支払先、mmdd、支払金額を取得
split_name = file_name[end_index + 1:].split("_")
shiharai_saki = split_name[0]
shiharai_kin = split_name[2]
# mmddがないファイルのみを抽出
if len(split_name[1]) != 4:
# ファイル名をリストに追加
file_list.append(file_name)
# ファイル名のリストを表示
print(file_list)
上記コードを実行すると、指定したフォルダ内に存在するファイルのうち、条件に合致するファイル名のリストが表示されます。
わたし:
コードを実行すると、「 shiharai_kin = split_name[2]」の行で「IndexError: list index out of range」が出ます。どう対応しましょうか?
ChatGPTちゃん:
「IndexError: list index out of range」というエラーは、インデックスがリストの範囲外であるために発生するエラーです。つまり、split_name
の要素数が2未満の場合にこのエラーが発生します。このエラーが出た原因は、指定したファイル名の書式が「[伝票番号]支払先_mmdd_支払金額」ではない場合があるためです。
そのため、対象とするファイル名の書式が「[伝票番号]支払先_mmdd_支払金額」に従っていない場合には、split_name
の要素数が足りなくなり、IndexError
が発生する可能性があることを考慮して、以下のようにsplit_name
の要素数をチェックしてから、shiharai_kin
を取得するように修正してください。
import os
# フォルダのパス
folder_path = "path/to/folder"
# ファイル名を格納するリスト
file_list = []
# フォルダ内のファイルを順に取得
for file_name in os.listdir(folder_path):
# ファイル名に「なし」という文字列がなく、かつ伝票番号で始まるファイルのみ抽出
if "なし" not in file_name and file_name.startswith("[") and file_name.find("]") != -1:
# 伝票番号を取得
start_index = file_name.find("[") + 1
end_index = file_name.find("]")
denpyo_no = file_name[start_index:end_index]
# 支払先、mmdd、支払金額を取得
split_name = file_name[end_index + 1:].split("_")
if len(split_name) >= 3:
shiharai_saki = split_name[0]
shiharai_kin = split_name[2]
# mmddがないファイルのみを抽出
if len(split_name[1]) != 4:
# ファイル名をリストに追加
file_list.append(file_name)
# ファイル名のリストを表示
print(file_list)
この修正をすることで、split_name
の要素数が2未満の場合にshiharai_kin
を取得しようとしなくなり、IndexError
が発生しなくなります。
わたし:
マジかよw
自分の働き方変わりすぎワロタw
くれぐれも社内情報は入れちゃダメだからね
実際の会話は文末に置いてますが、たとえば他にもこんな感じでやってくれてます
いやもうプログラミング勉強する気無くすて笑 pic.twitter.com/fPCot8Nerk
— nots™ (@call_me_nots) 2022年12月6日
実際の会話