Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- # источник/назначение
- dname_src = 'src'
- dname_dst = 'dst'
- # формат
- fmt = '{0} {1} - {2}.fb2'
- # аргументы
- args = [
- ['title-info', 'author', 'first-name'],
- ['title-info', 'author', 'last-name'],
- ['title-info', 'book-title'],
- ]
- # режим работы
- mode = 'emulation' # только сообщения
- #mode = 'copyFile' # скопировать файлы
- #mode = 'moveFile' # переместить файлы
- ###
- import re
- import os
- import shutil
- from xml.dom import minidom
- def getFirst(node, key):
- lst = node.getElementsByTagName(key)
- return lst[0] if lst else None
- def getText(node, key, ns):
- node = getFirst(node, key, ns)
- return node.text if node is not None else ''
- def solveArg(node, args):
- path = []
- for arg in args:
- path.append(arg)
- node = getFirst(node, arg)
- assert node, "Can't find node '{0}'".format('/'.join(path))
- return node.firstChild.data
- def parse(fname, fmt, args):
- root = minidom.parse(fname)
- assert root, "Can't open file '{0}'".format(fname)
- args = [solveArg(root, a) for a in args]
- fname = fmt.format(*args)
- return fname
- def makeDirs(dname):
- if os.path.exists(dname) == False:
- os.makedirs(dname)
- def modifyFile_emulation(src, dst):
- print('{0} -> {1}'.format(src, dst))
- def modifyFile_copyFile(src, dst):
- makeDirs(os.path.dirname(dst))
- shutil.copyfile(src, dst)
- modifyFile_emulation(src, dst)
- def modifyFile_moveFile(src, dst):
- makeDirs(os.path.dirname(dst))
- shutil.move(src, dst)
- modifyFile_emulation(src, dst)
- modifyFile = {
- "emulation": modifyFile_emulation,
- "copyFile": modifyFile_copyFile,
- "moveFile": modifyFile_moveFile,
- }[mode]
- for dname, dnames, fnames in os.walk(dname_src):
- for fname in fnames:
- if fname[-4:].lower() == '.fb2':
- try:
- fname_src = os.path.join(dname, fname)
- fname_dst = parse(fname_src, fmt, args)
- dst = dname_dst + dname[len(dname_src):]
- dst = os.path.join(dst, fname_dst)
- modifyFile(fname_src, dst)
- except Exception as e:
- print('{0}: {1}'.format(fname_src, e))
Advertisement
Add Comment
Please, Sign In to add comment