pythonで、ファイル名の一部を一瞬で修正する。(間違ったファイル名を修正する!)


Pythonを業務で生かして、ラクをしようと言うプロジェクトを実行中です。

1.現状/問題点
月初に経理チームから送付されているpdfファイルなのですが、下記の様に「変」です。
”( ”が、全角になってたりします。(半角と全角がごっちゃになっております。)
これを、Pythonで修正したい。(こんなの簡単だろうと思ったのですが、結構、ハマったので、共有しますね!)

C:\Users\user_xxx\Desktop\project>tree/F
フォルダー パスの一覧
ボリューム シリアル番号は 2E48-BBB4 です
C:.
│  rename_test.py
│  sample1.(1234).pdf
│  sample2(2345).pdf
│  sample3(4567).pdf

ファイル名が「壊れている」と、御存じの様に色々な作業(例えば、Pythonのpywinzipモジュールを使って、pdfファイルを圧縮するとか)に支障が出ます。
従って、ファイル名を一瞬で修正します。

2.コード

import os
fileExt=r".pdf"
x=[_ for _ in os.listdir() if _.endswith(fileExt)]
print(x)
x1=[s.replace('.(','(') for s in x]
print(x1)

x2=[s.replace('(','(') for s in x1]
print(x2)

x3=[s.replace(')',')') for s in x2]
print(x3)

for j in range(len(x3)):
    os.rename(x[j],x3[j])
j=j+1

3.ポイント
Pythonの標準機能のreplaceを使います。

>x1=[s.replace('.(','(') for s in x]

例えば、上は、リスト化されたxの要素を一つずつ(s)、拾っていくのだが、その際に、「.(」を「(」に書き換えろ!と言うコマンドです。(全角を半角に置換。)
因みに、「)」を「)」変換するのも一緒に(一行で)出来れば良いのですが、一つずつしかできない様です。
従って、一旦、リスト「X1」で一部だけ直した上で、リスト「X2」で更に修正。
最後は、リスト「X3」で更に修正と言う感じです。
従って、修正ポイントが10か所ならば、上みたいなコードを10個書く必要があります。(一つずつ修正するので。)

4.rename_test.py実行後
下記の様に、ファイル名が綺麗に修正されております。

C:\Users\user_xxx\Desktop\project>Tree/F
フォルダー パスの一覧             
ボリューム シリアル番号は 2E48-BBB4 です
C:.
│  rename_test.py
│  sample1(1234).pdf
│  sample2(2345).pdf
│  sample3(4567).pdf