Python переименовать файл на основе файла в том же каталоге - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть структура файлового каталога, подобная этой:

/ folder

  • aaa.pdf
  • bbb.xml
  • stamped.pdf

Там, где имена файлов PDF и XML не имеют шаблонов, за исключением того, что в каждой папке есть stamped.pdf (stamped.pdf необходимо игнорировать).

Я хочупереименуйте файл .xml в каталоге, чтобы он соответствовал имени файла .pdf, поэтому я получаю:

/ folder

  • aaa.pdf
  • aaa.xml
  • stamped.pdf

Python (пока ничего не переименовывается, просто пытаюсь получить имена файлов на этом этапе)

import os

pdf = ('.pdf')
xml = ('.xml')
stamped = ('stamped.pdf')

for folderName, subfolders, filenames in os.walk('folder'):
print('The current folder is ' + folderName)

for filename in filenames:
    namefile =  os.path.splitext(filename)[0]
    if (filename.endswith(pdf) and filename != stamped):
      pdfname = namefile
      print('PDF File Name: ' + pdfname)
    if filename.endswith(xml):
      print('RENAME XML FILE NAME: ' + namefile + 'TO: ' pdfname)
    else:
      print('')


print('')

Прямо сейчас яЯ просто печатаю значения, прежде чем я перейду к переименованию.

В приведенном выше сценарии pdfname не определено в условном XML, потому что переменная pdfname не установлена ​​/ недоступна в условном XML.

Как передать переменную pdfname, чтобы ее можно было использовать для переименования файла XML в том же каталоге?

Спасибо!

1 Ответ

0 голосов
/ 17 февраля 2019
import os

for parent, _, files in os.walk('.'):
    if not files:
        continue
    pdf_file = None
    xml_file = None
    for filename in files:
        if filename.lower().endswith('.pdf') and filename.lower() != 'stamped.pdf':
            pdf_file = filename
        elif filename.lower().endswith('.xml'):
            xml_file = filename
    new_xml_filename = '{}/{}.xml'.format(parent, os.path.splitext(pdf_file)[0])
    xml_file = '{}/{}'.format(parent, xml_file)
    if os.path.exists(new_xml_filename):
        print('cannot rename %s without overwriting an existing file. skipping' % xml_file)
        continue
    else:
        os.rename(xml_file, new_xml_filename)
        print('renamed {} -> {}'.format(xml_file, new_xml_filename))
...