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

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

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

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

Python

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

Q&A

解決済

1回答

578閲覧

複数ファイルをcsvで指定した命名規則に従ってrenemeしたい

tam0111

総合スコア2

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2023/04/22 14:40

前提・実現したいこと

python初心者です。python 3.9.1を使用しています。
rename.py
rename.csv
test1
└ aaa1.pdf
└ aaa2.pdf
test2
└ bbb1.pdf
└ bbb2.pdf

という複数フォルダ内(test1、test2内)の全てのpdfのファイル名を、A列に旧フォルダ名、B列にその旧フォルダ名に対応する新フォルダ名を一覧(例えば、aaa1.pdfであればA列にaaa1.pdf、B列にaaa1_new.pdf)としたrename.csvを参照して、以下のように一括remane処理したいです。

test1
└ aaa1_new.pdf
└ aaa2_new.pdf
test2
└ bbb1_new.pdf
└ bbb2_new.pdf

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

以下のプログラムを試したところ

import os import csv import glob dir_list = ["test1", "test2"] with open('rename.csv', 'r') as csvfile: csvreader = csv.reader(csvfile, delimiter=',', quotechar='"') for row in csvreader: old = row[0] new = row[1] for dir in dir_list: old_filepath = dir + "/" + old new_filepath = dir + "/" + new if os.path.exists(old_filepath): os.rename(old_filepath, new_filepath) else: print(old_filepath + " does not exist")

以下のようなエラーコードがでてきてしまいます。

FileNotFoundError: [Errno 2] No such file or directory: 'rename.csv'

試したこと

with open('rename.csv', 'r') as csvfile:

この部分のcsv名を絶対パスで試したところ、

test1/bbb2_new.pdf does not exist

といったようなログだけ残り、renameが完了しません。
昨年秋ごろには同じプログラム・ファイル類で正常に作動していたのですが、久しぶりに使用したところ原因がわからず困っています。
初歩的な質問で申し訳ございませんが宜しくお願い致します。

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

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

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

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

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

tatsu99

2023/04/23 00:47

OSが不明なので、windows前提です。 コマンドプロンプトを表示してください。 次に、そのrename.pyがあるフォルダまで、移動してください。 dir と入力して、rename.pyが表示されることを確認してください。 python rename.py と入力しスクリプトを起動してください。 それで、望んだ結果が得られます。
meg_

2023/04/23 01:18

> 昨年秋ごろには同じプログラム・ファイル類で正常に作動していたのですが、久しぶりに使用したところ原因がわからず困っています。 「正常に作動していた」ときと現在とで何かしらの差異がありそれがエラーの原因なのだと思います。「正常に作動していた」ときと同じ環境にしましょう。
guest

回答1

0

ベストアンサー

カレントディレクトリーの概念が理解できていないと思います。
絶対パスでないパスは相対パスと言って、カレントディレクトリーからの相対です。
'rename.csv'は、カレントディレクトリーにあるファイル。
test1/bbb2_new.pdf は、カレントディレクトリーにあるtest1というディレクトリーの中のbbb2_new.pdfというファイルです。

あなたが、「ここがカレントディレクトリー(相対ディレクトリーの起点)だ」と思っている場所と、実際のカレントディレクトリーの場所が異なるのでしょう。

案1:カレントディレクトリーを正しく理解する。プログラムの実行開始時にどこがカレントディレクトリーであるかは、実行のさせ方に依ります。

案2:全てのファイルを絶対パスで指定する。このコードだと、"test1""test2"'rename.csv'だけですね。

投稿2023/04/22 14:56

編集2023/04/22 17:43
otn

総合スコア84505

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

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

tam0111

2023/04/22 15:04

ご回答ありがとうございます。以下の4つのファイルは全て1つのフォルダ内に入れて実行しているのですが、それでは不十分ということでしょうか。 rename.py rename.csv test1 test2
otn

2023/04/22 17:21

はい。「ファイルが何処にあるか」と、「カレントディレクトリーがどこか」は直接関係ありません。 > プログラムの実行時にどこがカレントディレクトリーであるかは、実行のさせ方に依ります。 と書いたとおりです。
otn

2023/04/22 17:49

カレントディレクトリーとは何か: ・どう使われるか・・・相対パスの起点(回答で説明済み) ・どうやって決まるか・・・プログラム起動時の初期値はプログラムの実行の仕方で決まる(回答で説明済み※1) ・どうやって決まるかその2・・・プログラムの中で随時変更できる ・補足:プロセスの属性なのでプロセスごとにカレントディレクトリーがある ※1:ちょっと言葉が足りなかったので、回答に文字追加しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問