2016-09-27 6 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 

im, получив следующую ошибку ...

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 

I «Я прочитал некоторые другие темы по этой теме - относящиеся к абсолютным и относительным путям. Очевидно, что я намерен использовать абсолютные пути. Мои переменные являются строковыми переменными, другие слова ...

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 использует соответствующий разделитель.

Смежные вопросы