2016-09-27 3 views
1

初心者のPythonの質問。エラー3:Pythonでファイルの名前を変更する

私はディレクトリ内のファイルの名前を変更しようとしている

...

値NEWFILEが

C:\tempdir\1\newfilename.pdf

origfile = path 
newfile = path.split("\\") 
newfile = newfile[0]+"\\"+newfile[1]+"\\"+newfile[2]+"\\"+text+".pdf" 

os.rename(path, newfile) 
print origfile 
print newfile 

ありながら、パスの値が

C:\tempdir\1\0cd3a8asdsdfasfasdsgvsdfc1.pdf 

です次のエラーが発生しました...

os.rename(path, newfile) 
WindowsError: [Error 3] The system cannot find the path specified 

私はディレクトリとファイルが良いと知っています。私はその上でos.stats()を呼び出すことができるからです。私は

私のインポートライブラリがある....

import sys 
import os 
import string 
from os import path 
import re 
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 
from pdfminer.converter import TextConverter 
from pdfminer.layout import LAParams 
from pdfminer.pdfpage import PDFPage 
from cStringIO import StringIO 

I(()名前変更のPythonドキュメントを読んだ後)だけが、同じエラーを受け取る新しいファイル名を含めるようにNEWFILEの値に変更されました絶対パスと相対パスに関するこのトピックの他のスレッドを読んでください。明らかに、私の目的は絶対パスを使用することです。私の変数は文字列変数、別の言葉です...

origfile = "C:\tempdir\1\0cd3a8asdsdfasfasdsgvsdfc1.pdf" 

これで十分ですか?または、これはパスであることをPythonに伝えるために他の宣言を使用するはずですか?

+1

'origfile'でバックスラッシュをエスケープしていませんか? – PyNoob

+1

一般に 'parentdir、filename = os.path.split(origfile); newfile = os.path.join(parentdir、text + '.pdf') 'は、スラッシュの周りを手で分割して再構築しようとするよりも、より強固な方法です。これは、エラーを避けるのに役立つかもしれませんが、私はあなたがしたことで実際にはエラーを見ることはできません。あなたが私たちにそれを示していないので、 'text'の値にスラッシュがないことを確認する価値があると思います。 – jez

+0

私はどれほどばかげている。数千のファイルを分析し、既知の場所で見つかった文字列に基づいて名前を変更します。はい、いくつかのファイル(最初のファイルを含む)にはファイル名に "/"が付いています。疑わしいはずです。しかし、私はos.path.split()ナゲットが大好きです。非常に便利であり、ありがとう。 –

答えて

1

代わりに次のことを試すことができますか?別のAPIを使用していると、名前の変更が簡単になることがあります。 pathlibモジュールを使用

import pathlib 
parent = pathlib.Path('C:/')/'tempdir'/'1' 
old = parent/'0cd3a8asdsdfasfasdsgvsdfc1.pdf' 
new = parent/'newfilename.pdf' 
old.rename(new) 

は、クロスプラットフォームの方法でパスを幾分単純作業を行います。

0

あなたはより良いntpathを使用する必要がありますが、あなただけのファイル名を変更する(hereを説明):

したがって
>>> filepath = 'C:\\tempdir\\1\\0cd3a8asdsdfasfasdsgvsdfc1.pdf' 
>>> dirname, filename = ntpath.dirname(filepath), ntpath.basename(filepath) 
>>> dirname 
'C:\\tempdir\\1' 
>>> filename 
'0cd3a8asdsdfasfasdsgvsdfc1.pdf' 

を、あなたはおそらく次のように名前の変更を使用することができるようになります:

>>> os.rename(filepath, dirname + ntpath.sep + 'newfilename.pdf') 

ntpath.sepを使用すると、使用しています適切なセパレータ。

関連する問題