2016-09-27 56 views
1

Python新手问题。错误3:在Python中重命名文件

我想在一个目录重命名文件...

路径的值是

C:\tempdir\1\0cd3a8asdsdfasfasdsgvsdfc1.pdf 

而值的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 

即时获取以下错误...

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

我知道目录和文件都很好,因为我可以调用它的os.stats()。我已经改变到newfile中的价值,包括新的文件名,但只收到了同样的错误

我进口图书馆....

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 

我(阅读命名Python文档()后)已经阅读了关于该主题的其他一些主题 - 有关绝对路径和相对路径。显然,我的意图是使用绝对路径。我的变量是字符串变量,其他字...

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时重命名更容易。

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

使用pathlib模块使工作在跨平台的方式路径略为简单。

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使用适当的分离器