🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

Q&A

解決済

2回答

5286閲覧

python, os.rename エラー

NewYork

総合スコア5

Python 3.x

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

0グッド

0クリップ

投稿2019/12/18 04:39

こちらのページを参照して、ファイルのrenameを行おうとしました
https://www.sejuku.net/blog/63732

コード

import os, glob
os.getcwd()

os.chdir(r'C:\Users\naitoh\Downloads')
print(os.getcwd())

path1 = glob.glob('./ABC.xls')
print(path1)

path2 = ('test.xls')
os.rename(path1, path2)

print(os.path.exists(path2))

print(path1)では、変更したいファイルが表示されるのですが、実行すると、
次のエラーメッセージがでます。

#TypeError: rename: src should be string, bytes or os.PathLike, not list

どのように修正すればrenameできますか?

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

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

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

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

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

magichan

2019/12/19 07:38

"*ABC*.xls" に合致するファイルが複数ある場合はどのように処理するべきかを明確にしてください。
NewYork

2019/12/20 02:36

ダウンロードしたファイルをrename後、別のプログラムで処理し別名で保存するので、"*ABC*.xls"に合致するファイルが複数にならない想定です。
guest

回答2

0

ベストアンサー

対象となるファイルが複数(又は0個)ある場合もありますので、glob() の戻り値としてはファイル名のリストが得られます。
一方、os.rename() の第一引数としては ファイル名(文字列)を渡す必要があります。
にも関わらず現状のコードではos.rename()の第一引数にリストを渡しているのでエラーとなっております。

エラー内容も

TypeError: rename: src should be string, bytes or os.PathLike, not list

ソース(第一引数)として文字列よこせ、リストじゃねー(意訳)

となっております。

とりあえず「合致するファイルが複数にならない想定」とのことですので、リストより最初の1つ目の要素(ファイル名)をos.rename()の第一引数として渡すように変更すると良いのではないでしょうか。

Python

1import os, glob 2 3files = glob.glob('./*ABC*.xls') 4print(files) 5 6# 一応リストが空でないかをチェック 7if len(files) > 0: 8 # ファイルは1つしか無いはずなので、最初の1つ目を使う 9 file = files[0] 10 # 名前を変更 11 os.rename(file, 'test.xls')

投稿2019/12/20 03:24

magichan

総合スコア15898

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

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

NewYork

2019/12/20 04:20

ようやく解決しました。 どうもありがとうございます。
guest

0

google翻訳
TypeError: rename: srcは、リストではなく、string、bytes、またはos.PathLikeである必要があります

path1ってのはリストになってるんでは

投稿2019/12/18 04:43

y_waiwai

総合スコア88038

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

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

NewYork

2019/12/18 04:52

glob は リストで返ってくるのですね。 pathlib を使ってみます。
y_waiwai

2019/12/18 08:45

いや、リストで帰ってきたならその要素を渡しましょう
NewYork

2019/12/19 05:47

申し訳ない。意味が分からない
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問