質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

745閲覧

複数ディレクトリにある同名ファイルを一括で同じ名前に変更したい

hani3044

総合スコア2

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2022/10/02 08:33

編集2022/10/02 11:15

前提

Windowsを使っている初心者です。Pythonで実行したいと考えています。

実現したいこと

複数ディレクトリにある同名ファイルをそれぞれ一括で同じ名前に変更したいと考えています。
例えば、それぞれのディレクトリにある「A.png」を一括で「あ.png」、「B.png」を「い.png」のようにしたいです。
ファイル名は
・連番・日付は不要。
・変更後の名前は日々変わるので都度入力したい。
です。

ディレクトリ構造

ファイル名変更.ipynb
test1
├ A.png
├ B.png
├ C.png

test2
├ A.png
├ B.png
├ C.png

test3
├ A.png
├ B.png
├ C.png

この構造のものが仕事で日々量産にされている状況です。

該当のソースコード

Python

1import glob 2import os 3 4path = './*/*.png' 5flist = glob.glob(path) 6for file in flist: 7 os.rename(file, './*/あ' + '.png')

ご回答にてヒントをいただき再度チャレンジして失敗したもの。

Python

1import glob 2import os 3 4path = './*/*.png' 5flist = glob.glob(path) 6old_names = ['A', 'B', 'C'] 7new_names = ['あ', 'い', 'う'] 8 9for old_name, new_name in zip(old_names, new_names): 10 flist = flist.replace(old_name, new_name) 11print(flist)

発生している問題・エラーメッセージ

OSError Traceback (most recent call last) Cell In [38], line 10 7 flist = glob.glob(path) 9 for file in flist: ---> 10 os.rename(file, './*/あ' + '.png') 13 list = glob.glob(path) OSError: [WinError 123] ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。: '.\\test1\\A.png' -> './*/あ.png'

ひとまずA.pngからあ.pngだけ変えてみようとした時点でひっかかってしまいました。
初心者ゆえめちゃくちゃなことをしてるかもしれません。
実現したいことができていれば、このコードでなくても問題ありません。
何卒アドバイスをよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

変更後の名前は日々変わるので都度入力したい。

とのことですが、
以下のようなCSVファイルを作成しておき、その内容に従ってリネームするのは、いかがでしょうか。
CSVファイル名はrename.csv固定です。(カレントディレクトリ下においてください)

rename.csv

CSV

1#変更前ファイル名,変更後ファイル名 2A.png,あ.png 3B.png,い.png 4C.png,う.png
import csv import glob import os import os.path dict_name = {} with open("rename.csv", encoding='utf-8') as input_file: reader = csv.reader(input_file) #ヘッダはスキップ header = next(input_file) for oldname,newname in reader: #変更前の文字を小文字に変換 key = oldname.lower() dict_name[key] = newname path = './**/*.png' files = glob.glob(path) for file in files: apath = os.path.abspath(file) name = os.path.basename(apath).lower() if name in dict_name: newpath = os.path.dirname(apath) + '\\' + dict_name[name] print(apath,'==>',newpath) os.rename(apath,newpath)

投稿2022/10/02 11:16

編集2022/10/02 11:51
tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hani3044

2022/10/02 11:35 編集

ご教示いただきありがとうございます。 csvファイルにて変換する方法を思いついておらず、検索してみたのですがなかなかヒットせずコードを作成できませんでした。 CSVファイルを作成したのち、どのようなコードを記載すればよいのかご教示いただくのは可能でしょうか。 https://teratail.com/questions/234728?sort=3 こちらを参考にしたのですが、他ディレクトリからとるあたりでわからなくなってしまいました。 不勉強で申し訳ございません。
tatsu99

2022/10/02 11:51

ソースを追記しました。
hani3044

2022/10/02 12:22

詳細なコードを書いていただき本当にありがとうございます。 無事変換できました。明日から活用させていただきます。 不勉強だった部分はいただいたコードをもとに再度勉強し、自力で書けるようにします。 ありがとうございました。
guest

0

アドバイスとのことなので、

まずは、

python

1for file in flist: 2 print(file)

としてみて、fileに何が入っているか確認しましょう。

そして、

python

1 os.rename(file, 'xxx')

の、xxx にどのような文字列を入れたらいいのか考えましょう。

基本的には、file の文字列の一部を書き換えなければならないはずです。

投稿2022/10/02 10:09

TakaiY

総合スコア12765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hani3044

2022/10/02 13:45

TakaiYさんもご教示いただきありがとうございました。 replaceなどを使って考えましたが、こちらもまだわからなかったため、今後の勉強の課題としたいと思います。
guest

0

---> 10 os.rename(file, './*/あ' + '.png')

ディレクトリ名に*は使えません。

ディレクトリそれぞれに、該当する名前がないか探しに回る必要があります

投稿2022/10/02 08:59

編集2022/10/02 09:00
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hani3044

2022/10/02 13:47

y_waiwaiさんもありがとうございました。 ディレクトリ名のエラー部分がこの部分だったことに気づいておりませんでした。 それぞれを探しに回るやり方なども今後の課題としたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問