Not-So-News

ニュースにならないニュースを配信

文系社員こそChatGPT をフル活用しよう

フォルダの中から、名付けルールに沿ってないファイル名探すのダルいなあ。

ChatGPT ちゃんに頼むか。

 

 

わたし:

フォルダの中に、「[伝票番号]支払先_mmdd_支払金額」という形式のファイル名を持つファイルがたくさん入っています。なお、「支払先」以外の3項目はすべて数値です。
これらのファイルのうち、以下の条件をすべて満たすファイル名を抽出するPython コードを書いてください。

1. ファイル名に「なし」という文字列がない
2. ファイル名が「[伝票番号]」で始まる(「伝票番号」の部分には数字が入る
3. mmddがファイル名から抜けている(「mmdd」は日付を示す4ケタの数字)

 

 

ChatGPTちゃん:

以下がPythonコードになります。フォルダのパスと条件に応じたファイル名のリストが返されます。

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を取得するように修正してください。

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("_")
        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

 

 

くれぐれも社内情報は入れちゃダメだからね

実際の会話は文末に置いてますが、たとえば他にもこんな感じでやってくれてます

 

 

実際の会話

 

実際の会話