1

これに関連する投稿をいくつか見つけましたが、提案されたコードを使用しようとすると、「指定されたファイルが見つかりません」というメッセージが表示され続けます。ある種のパスの問題だと思います。「Cust」フォルダー内にはいくつかのフォルダーがあり、それらのフォルダーにはそれぞれいくつかのファイルがあり、一部には「.」が含まれています。削除する必要があるファイル名で。ここで何が間違っているのか分かりますか?

customer_folders_path = r"C:\Users\All\Documents\Cust"
for directname, directnames, files in os.walk(customer_folders_path):
    for file in files:
        filename_split = os.path.splitext(file)
        filename_zero = filename_split[0]            
        if "." in filename_zero:
            os.rename(filename_zero, filename_zero.replace(".", ""))
4

2 に答える 2

2

ファイルを使用os.walkしてから反復処理するときは、ファイル名のみを反復処理していることに注意してください。完全なパス (os.rename正常に機能するために必要なもの) ではありません。ファイル自体にフルパスを追加することで調整できます。この場合、次を使用して結合directnameおよび結合することで表されます。filename_zeroos.path.join

os.rename(os.path.join(directname, filename_zero), 
          os.path.join(directname, filename_zero.replace(".", "")))

また、他の場所で使用するかどうかはわかりませんが、filename_split変数を削除してfilename_zeroasを定義することもできますfilename_zero = os.path.splitext(file)[0]。これは同じことを行います。ディレクトリは Python によって適切に解釈されるため、に変更することもcustomer_folders_path = r"C:\Users\All\Documents\Cust"できます。customer_folders_path = "C:/Users/All/Documents/Cust"

編集: @bozdoz が賢く指摘したように、接尾辞を分割すると、「元の」ファイルが失われるため、見つけることができません。あなたの状況でうまくいくはずの例を次に示します。

import os

customer_folders_path = "C:/Users/All/Documents/Cust"
for directname, directnames, files in os.walk(customer_folders_path):
    for f in files:
        # Split the file into the filename and the extension, saving
        # as separate variables
        filename, ext = os.path.splitext(f)
        if "." in filename:
            # If a '.' is in the name, rename, appending the suffix
            # to the new file
            new_name = filename.replace(".", "")
            os.rename(
                os.path.join(directname, f),
                os.path.join(directname, new_name + ext))
于 2013-01-06T05:29:23.913 に答える