Здравствуйте.
Данный файл является приложением к опусу «Python в библиотеке». Здесь собраны основные скрипты упомянутые в учебнике.
Основная «фишка» данного текста такая: «легким движением» выполнения скрипта «fb2_dir.py» содержимое этого файла скопируется в папки и файлы со скриптами.
Т.е. при успешном выполнении нижеследующих действий в Вашем распоряжении появятся исходные коды скриптов.
Действия следующие:
1. любым способом скопируйте скрипт «fb2_dir.py» из файла fb2 в отдельный файл.
2. замените блоки « , ,» на блок из четырех пробелов.
3. поместите данный файл и скрипт «fb2_dir.py» в отдельную папку (желательно).
4. запустите скрипт. Если все сделано правильно, появится папка с исходниками
5. вполне разумно ВЫ можете опасаться злонамеренных действий ужасного хакера w_cat.
Предварительно внимательно проверьте предлагаемые скрипты, от этого все только выиграют.
w_cat
PS
Да, ежели не будет протестов от читателей, я намереваюсь регулярно обновлять этот файл, пополняя и исправляя его содержимое.
13.07.2022
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
# преобразование файла fb2 в каталог с папками и файлами
#--------------------------------------------------
stack = []
List = []
#---
def SaveList(fn, L):
, ,f = open(fn, 'w', encoding="utf-8")
, ,for i in L:
, , , ,f.write(my_str(i))
, ,f.close()
def my_str(s):
, ,s=s.replace(' , ,',' ')
, ,s=s.replace('>','**')# вставьте вместо ** символ "больше"
, ,s=s.replace('<','**')# вставьте вместо ** символ "меньше"
, ,return s
#----------------------------------------
path = os.getcwd()
cur_dir = path
fb2_file = 'fb.fb2'
if not os.path.isfile(fb2_file):
, ,sys.exit(fb2_file + ' - does not exist')
folder = False
text_f = False
Other = False
f =open(fb2_file, encoding="utf-8")
Li=f.readlines()
for i in Li:
, ,if Other:
, , , ,if i.find('
, , , , , ,Other = False
, , , ,continue
, ,if text_f:
, , , ,if i.find('
, , , , , ,text_f = False
, , , , , ,SaveList(file_name, List)
, , , ,elif i.find('
, , , , , ,s = i[10:-13]
, , , , , ,file_name = os.path.join(cur_dir, s)
, , , ,elif i.find('
')>-1:, , , , , ,i = ''
, , , ,else:
, , , , , ,List.append(i[3:]) , ,
, , , ,continue
, , , ,
, ,if folder:
, , , ,if i.find('
, , , , , ,s = i[10:-13]
, , , , , ,cur_dir = os.path.join(cur_dir, s)
, , , , , ,stack.insert(0,cur_dir)
, , , , , ,if os.path.isdir(cur_dir):
, , , , , , , ,sys.exit(cur_dir + ' - exists')
, , , , , ,os.mkdir(cur_dir)
, , , , , ,folder = False
, , , ,continue
, ,if i.find(' , , , ,if i.find('type="d"')> -1:
, , , , , ,folder = True
, , , ,else:
, , , , , ,if i.find('type="f"')> -1:
, , , , , , , ,text_f = True
, , , , , , , ,List.clear()
, ,if i.find('
, , , ,if len(stack)>0:
, , , , , ,stack.pop(0)
, , , , , ,if len(stack)>0:
, , , , , , , ,cur_dir = stack[0]
print( 'Done!')
Конец скрипта fb2_dir.py
#!/bin/env python
# -*- coding: utf-8 -*-
# replacing spaces with dots
import sys, os
path = os.getcwd()
def work():
new_List = [] #
old_List = []
new_List.clear() #
old_List.clear()
print('')
FN = input('Введите имя файла:')
fn1=os.path.join(path, FN)
base=os.path.splitext(FN)[0]
fb2_file=open(fn1,'r')
old_List=fb2_file.readlines()
fb2_file.close()
n = 0
for item in old_List:
, , n += 1
, , s='|'+item
, , s=s.replace('\t',' ')
, , s=s.replace('| ','| . .')
, , s=s.replace(' ',' . .')
, , s = "{0:2d}{1:s}".format(n,s)
, , new_List.append(s)
fn2=os.path.join(path, base)+".txt"
new_file=open(fn2,'w')
for item in new_List:
, , new_file.write(item)
new_file.close()
print('Done')
while True:
work() # Exit => Ctrl + C
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Упаковка файлов fb2 в архивы zip
import sys, os
import zipfile
co = 0
def parse_file(FileName):
, ,global co
, ,fn = os.path.basename(FileName)
# , ,print fn+'.zip'
, ,z = zipfile.ZipFile(fn+'.zip', 'w', zipfile.ZIP_DEFLATED) # Создание нового архива
, ,z.write(fn)
, ,z.close()
, ,os.remove(FileName)
, ,co += 1
def parse_dir(fn):
, , , ,m = fn.split('.')[-1]
# , , , ,print fn
, , , ,if (m == 'fb2'):
, , , , , ,parse_file(fn)
, , , , , ,
, , , , , ,
path = os.getcwd()
files = os.listdir(path)
for file in files:
# , , , ,print (os.path.join(path, file))
, , , ,parse_dir(os.path.join(path, file))
print ('Zip => ' + str(co))
print ('Done!')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
import xml.dom.minidom
import zipfile
import shutil
# form 21.05.2021
#sys.path.append("/work/Python/modules/s")
#--------------------------------------------------
#from m_list import Books
Books = []
def FindValue(s1, s2):
global Books
# L1 = []
maxW = len(Books)
L1 = [s1, s2]
if maxW == 0:
, , Books.append(L1)
# , ,Books += [s1, s2]
else:
, , minW = -1
, , cur = maxW // 2
, , wList = Books[cur][0]
, , while not(s1 == wList):
, , , ,if s1 < wList:
, , , , , ,maxW = cur
, , , ,else:
, , , , , ,minW = cur
, , , ,if maxW - minW == 1:
, , , , , ,if s1 > wList:
, , , , , , , ,cur += 1
, , , , , ,Books.insert(cur, L1)
, , , , , ,return
, , , ,cur = ((maxW-minW) //2) + minW
, , , ,wList = Books[cur][0]
, , Books.insert(cur+1, L1)
def PrintList():
, ,for i in Books:
, , , ,print (i[0] + ' ' + i[1])
def SaveList():
, ,f = open('lib.txt', 'w')
, ,for i in Books:
, , , ,f.write(i[0].encode('cp1251')+'\n')
, , , ,f.write(i[1]+'\n\n')
, ,f.close()
#--------------------------------------------------
#from m_dir import parse_dir
Capture = ''
FileName = ''
def parse_zip(fn):
, ,global FileName
# , ,print >> sys.stderr, 'Zip:', os.path.basename(fn)
, ,FileName = fn
, ,z = zipfile.ZipFile(fn, 'r')
, ,filelist = z.namelist()
, ,filelist.sort()
, ,for n in filelist:
, , , ,try:
, , , , , ,if n[-4:] == ".fb2":
, , , , , , , ,parse_fb2(z.open(n))
, , , ,except:
# , , , , , ,print >> sys.stderr, 'X15:', n
, , , , , ,print( "X15:", n )
def parse_fb2(fn):
, ,global Capture
, ,if isinstance(fn, str):
, , , ,fn = open(fn)
, ,try:
, , , ,dom = xml.dom.minidom.parse(fn)
, ,except:
, , , ,print('Error:')
, , , ,print(FileName)
, ,else:
, , , ,dom.normalize()
, , , ,node1=dom.getElementsByTagName("description")[0]
, , , ,node1=node1.getElementsByTagName("title-info")[0]
, , , ,try:
, , , , , ,node1=node1.getElementsByTagName("author")[0]
, , , , , ,node1=node1.getElementsByTagName("last-name")[0]
, , , , , ,s = node1.childNodes[0].nodeValue
, , , , , ,s = s.encode("utf-8")
, , , , , ,Capture = s.capitalize()
, , , ,except:
, , , , , ,Capture = "noname"
, , , ,FindValue(Capture, FileName)
def parse_file(fn):
, ,global FileName
, ,FileName = fn
, ,m = fn.split(".")[-1]
, ,if (m == "zip"):
, , , ,parse_zip(fn)
, ,elif (m == "fb2"):
, , , ,parse_fb2(fn)
, , , ,
def parse_dir(fn):
, ,dirlist = os.listdir(fn)
, ,dirlist.sort()
, ,for i in dirlist:
, , , ,if os.path.getsize(i) > 0:
, , , , , ,parse_file(os.path.join(fn, i))
#? , , , ,else:
#? , , , , , ,print("bad zip "+ i)
#--------------------------------------------------
#from sort import path, mySorting
path = os.getcwd()
def mPrintList(oldn, M):
, ,global path
, ,ss = str(oldn, encoding='utf-8')
# , ,ss = path+"/"+s.encode("utf-8")
# , ,print(s)
, ,if (not os.path.isdir(ss)):
# , , , ,print(ss)
, , , ,os.mkdir(ss)
, ,for k in M:
, , , ,if (not os.path.isfile(ss)):
# , , , , , ,print(ss)
, , , , , ,
, , , , , ,shutil.move(k, ss)
# , , , ,print(ss)
# , , , ,shutil.move(k, ss)
, , , ,
def mySorting():
, ,global Books
, ,old_name = Books[len(Books)-1][0]
, ,flag = 0
, ,for i in range(len(Books)-1, 0, -1):
, , , , if flag == 0 and Books[i-1][0] == old_name:
, , , , , , flag = 1
, , , , , , L = []
, , , , , , L.append(Books[i][1])
, , , , , , Books.pop(i)
, , , , , ,
, , , , if flag == 1:
, , , , , , if Books[i-1][0] == old_name:
, , , , , , , ,L.append(Books[i-1][1])
, , , , , , , ,Books.pop(i-1)
, , , , , , else:
, , , , , , , , mPrintList(old_name, L)
, , , , , , , , old_name = Books[i-1][0]
, , , , , , , , flag = 0
, , , , else:
, , , , , , old_name = Books[i-1][0]
, ,
, ,if flag == 1:
, , , ,mPrintList(old_name, L)
, , , ,
#----------------------------------------
def mMain():
mySorting()
fbName = "f"
fNum = 1
fName = fbName + str(fNum) #'f1'
num = 0
if len(Books) > 0:
, , if (not os.path.isdir(fName)):
, , , , os.mkdir(fName)
, , for i in Books:
, , , , if (not os.path.isfile(path+"/"+fName)):
, , , , , , shutil.move(i[1], path+"/"+fName)
, , , , num += 1
, , , , if num == 9: # number in folder !!!
, , , , , , fNum += 1
, , , , , , fName = fbName + str(fNum)
, , , , , , if (not os.path.isdir(fName)):
, , , , , , , , os.mkdir(fName)
, , , , , , num = 0
print( 'Done!')
#--------------------------------------------------
parse_dir(path)
if len(Books) == 0:
, ,print('Empty dir')
else:
, ,mMain()
#!/usr/bin/env python
# -*- codning: utf-8 -*-
import sys, os
# проверка структуры файла fb2
#----------------------------------------------
file = 'lib.fb2'
#count = 1 # счетчик строк
flag = False # признак анализа тега
S = '' # место для обработанного тега
Tag = '' # место для тега
L = [] # стек
Tagss = []
'''
with open(file, encoding="utf8") as f:
, ,LList = f.readlines()
for i in LList:
, ,count += 1
, ,if i.find('section') > -1:
, , , ,print(count)
, , , ,print(i)
f.close()
'''
def printStack():
, ,st = open("stack.txt", "w")
, ,for n in Tagss:
, , , ,#print(n) # вывод на этран
, , , ,st.write(n+'\n') # или вывод в файл
, ,st.close()
def run_analiz(fn):
, ,count = 1 # счетчик строк
, ,if not os.path.isfile(fn): # проверка существования файла
, , , ,print('"'+fn+'" file does not exist.')
, , , ,return
, ,
, ,global Tagss
, ,f = open(fn, 'rb') #
, ,d = f.read()
, ,for n in d:
, , , ,if n == 10: # символ завершения строки
, , , , , ,count += 1 # + в счетчик строк
, , , ,elif chr(n) == '<': # начало тега
, , , , , ,flag = True
, , , , , ,Tag = '' # подготовка места для тега
, , , ,else:
, , , , , ,if flag: # читаем тег
, , , , , , , ,if chr(n) == '>': # провека на конец тега, если да:
, , , , , , , , , ,S = Tag.split(' ')[0] # отбрасывание возможных параметров
, , , , , , , , , ,flag = False
, , , , , , , , , ,if S[0] == '/': # проверка на закрывающий тег
, , , , , , , , , , , ,Tagss.append(str(count)+' <'+S)
, , , , , , , , , , , ,S = S[1:] # удаление слеша
, , , , , , , , , , , ,Lo = L.pop() # чтение из стека
, , , , , , , , , , , ,if Lo[0] != S: # сообщение об ошибке
, , , , , , , , , , , , , ,printStack() # распечатка стека
, , , , , , , , , , , , , , # ежели такая распечатка не нужна - закомментируйте
, , , , , , , , , , , , , ,print('Teg = "'+Lo[0]+'" begin in str = '+ str(Lo[1]))
, , , , , , , , , , , , , ,print('Не соответствует')
, , , , , , , , , , , , , ,print('Teg ="' +S+ '"end in str = '+ str(count))
, , , , , , , , , , , , , ,f.close()
, , , , , , , , , , , , , ,return
, , , , , , , , , ,else:
, , , , , , , , , , , ,if Tag[-1] != '/': # обработка одинарных тегов
, , , , , , , , , , , , , ,T = Tag.split(' ')
, , , , , , , , , , , , , ,Tagss.append(str(count)+' <'+T[0])
, , , , , , , , , , , , , ,Lo = [S, count] # подготовка для записи в стек
, , , , , , , , , , , , , ,L.append(Lo) # запись в стек
, , , , , , , ,else:
, , , , , , , , , ,Tag = Tag + chr(n) # добавление символа к тегу
, ,f.close()
, ,print('OK!!!') # сообщение об удачной проверке.
while True: # бесконечный цикл проверок
FN = input('Введите имя файла: ['+file+']')
if FN == '': # если сразу нажат "Enter"
, , run_analiz(file) # повторяем проверку файла
else:
, , file = FN # запоминаем новое имя
, , run_analiz(file) # проверяем новый файл
#!/usr/bin/env python
# -*- codning: utf-8 -*-
import sys, os
import zipfile
# создание списка файлов fb2 с повреждением структуры
#----------------------------------------------
OList = []
Count = 0
def fb2err(fn): # проверка структуры файла
, ,global Count
, ,flag = False # признак анализа тега
, ,S = '' # место для обработанного тега
, ,Tag = '' # место для тега
, ,L = [] # стек
, ,if isinstance(fn, str):
, , , ,f = open(fn, 'rb') # открыт .fb2
, , , ,d = f.read()
, ,else:
, , , ,d = fn.read() # открыт .zip
, ,for n in d:
, , , ,if chr(n) == '<': # начало тега
, , , , , ,flag = True
, , , , , ,Tag = '' # подготовка места для тега
, , , ,else:
, , , , , ,if flag: # читаем тег
, , , , , , , ,if chr(n) == '>': # провека на конец тега, если да:
, , , , , , , , , ,S = Tag.split(' ')[0] # отбрасывание возможных параметров
, , , , , , , , , ,flag = False
, , , , , , , , , ,if S[0] == '/': # проверка на закрывающий тег
, , , , , , , , , , , ,S = S[1:] # удаление слеша
, , , , , , , , , , , ,Lo = L.pop() # чтение из стека
, , , , , , , , , , , ,if Lo != S: # ОШИБКА
, , , , , , , , , , , , , ,Count += 1
, , , , , , , , , , , , , ,return True
, , , , , , , , , ,else:
, , , , , , , , , , , ,if Tag[-1] != '/': # обработка одинарных тегов
, , , , , , , , , , , , , , L.append(S) # запись в стек
, , , , , , , ,else:
, , , , , , , , , ,Tag = Tag + chr(n) # добавление символа к тегу
, ,return False # удачная проверка.
def parse_zip(fn): # обработка zip
, ,global OList
, ,z = zipfile.ZipFile(fn, 'r')
, ,filelist = z.namelist()
, ,filelist.sort()
, ,for n in filelist:
, , , ,try:
, , , , , ,if n[-4:] == ".fb2":
, , , , , , , ,if fb2err(z.open(n, 'r')):
, , , , , , , , , ,OList.append(fn)
, , , ,except:
, , , , , ,print( "X15:", n )
def parse_file(fn): # обработка файла
, ,global OList
, ,m = fn.split(".")[-1]
, ,if (m == "zip"): # если zip
, , , ,parse_zip(fn)
, ,elif (m == "fb2"): # если fb2
, , , ,if fb2err(fn):
, , , , , ,OList.append(fn)
, , , ,
def parse_dir(fn): # сканирование папки
, ,dirlist = os.listdir(fn)
, ,dirlist.sort()
, ,for a in dirlist:
, , , ,b = os.path.join(fn, a)
, , , ,if os.path.isdir(b):
, , , , , ,parse_dir(b) # сканирование подпапки
, , , ,else:
, , , , , ,if os.path.getsize(b) > 0:
, , , , , , , ,parse_file(b)
#-------------------------
path = os.getcwd()
parse_dir(path) # сканирование текущей папки
if len(OList) > 0: # сохранение результатов
, ,fn = 'fb2Error.txt'
# при необходимости сохранения старых файлов fb2Error.txt - снять комментарии
, ,nu = 0
, ,while os.path.isfile(fn):
, , , ,nu += 1
, , , ,fn = 'fb2Error'+str(nu)+'.txt'
#
, ,f = open(fn, 'w')
, ,for i in OList:
, , , ,f.write(i+'\n')
, ,f.close()
print('Файлов с ошибкой '+str(Count))
#!/usr/bin/env python
# -*- codning: utf-8 -*-
import sys, os
import shutil
# перемещение поврежденный файлов fb2 для последующего ремонта
#----------------------------------------------
path = os.getcwd()
Count = 0
fn = 'fb2Error.txt' # !!! проследить за правильностью имени файла !!!
if os.path.isfile(fn): # проверяем существование
, ,with open(fn, 'r') as text: # открываем файл
, , , ,mylist = text.readlines() # и читаем
, ,fName = 'infiles' # подготавливаем имя папки адресата
, ,if (not os.path.isdir(fName)): # если адресата нет
, , , ,os.mkdir(fName) # то создаем его
, ,mydir = os.path.join(path, fName)
, ,for i in mylist: # просматриваем список
, , , ,i = i.strip() # отрубаем пробелы
, , , ,name = os.path.basename(i) # выделяем имя файла
, , , ,dst = os.path.join(mydir, name) # определяем куда его сунуть
, , , ,if os.path.isfile(i) and (not os.path.isfile(dst)):
, , , , , ,shutil.move(i, dst) # перемещаем файл
, , , , , ,Count += 1 # обновляем статистику
#os.path.join(dirpath, filename))
print('Файлов перемещено '+str(Count))
#shutil.move(src, dst)
#!/usr/bin/env python
# -*- codning: utf-8 -*-
import sys, os
import shutil
# перемещение файлов fb2 после ремонта на места дислокации
#----------------------------------------------
path = os.getcwd()
Count = 0
fn = 'fb2Error.txt' # !!! проследить за правильностью имени файла !!!
if os.path.isfile(fn): # проверяем существование
, ,with open(fn, 'r') as text: # открываем файл
, , , ,mylist = text.readlines() # и читаем
, ,fName = 'infiles' # подготавливаем имя ремонтной папки
, ,if (not os.path.isdir(fName)): # если адресата нет
, , , ,print('???')
, , , ,exit() # то делать нечего...
, ,mydir = os.path.join(path, fName) # ремонтная папка
, ,for i in mylist: # просматриваем список
, , , ,i = i.strip() # отрубаем пробелы
, , , ,name = os.path.basename(i) # выделяем имя файла
, , , ,dst = os.path.join(mydir, name) # определяем откуда его высунуть
, , , ,if os.path.isfile(dst): # если файл на месте
, , , , , ,shutil.move(dst,i) # перемещаем файл
, , , , , ,Count += 1 # обновляем статистику
print('Файлов перемещено '+str(Count))
#!/usr/bin/env python
# -*- codning: utf-8 -*-
import sys, os
import zipfile
# Извлечение из архивов в папке
#----------------------------------------------
path = os.getcwd()
Count = 0
def parse_zip(fn): # обработка zip
, ,global path
, ,global Count
, ,z = zipfile.ZipFile(fn, 'r')
, ,z.extractall(path)
, ,Count += 1
def parse_file(fn): # обработка файла
, ,m = fn.split(".")[-1]
, ,if (m == "zip"): # если zip
, , , ,parse_zip(fn)
, , , ,
def parse_dir(fn): #
, ,dirlist = os.listdir(fn)
, ,dirlist.sort()
, ,for a in dirlist:
, , , ,if os.path.getsize(a) > 0:
, , , , , , , ,parse_file(a)
#-------------------------
parse_dir(path) # сканирование текущей папки
print('Файлов извлечено '+str(Count))
#!/bin/env python
# -*- coding: utf-8 -*-
# Объединение абзацев (версия 19.10.21)
import sys, os
#--------------------------------------
def EndStr(s):
, ,SQ = ''
, ,for a in reversed(s):
, , , ,if a == ' ':
, , , , , ,return SQ[:-1]
, , , ,else:
, , , , , ,SQ = a+SQ
#--------------------------------------
old_List = [] # Сюда читается
new_List = [] # Промеждуточный список
#--------------------------------------
#FN = input('Введите имя файла:')
#fn1=path+FN
FN = '2_.txt'
fb2_file=open(FN,'r')
#fb2_file=open(FN,'r', encoding='utf-8')
old_List=fb2_file.readlines()
fb2_file.close()
#--------------------------------------
SS = '' # Промежуточное хранение строки
FlagQ = False
i = -1
for item in old_List: # первый проход
поиск разорванных строк
, ,i += 1
, ,if i >= len(old_List):
# , , , ,new_List.append(item[i+1]) ?
, , , ,break
, ,s = item.strip()# Обрезание пробелов
, ,if s == '':
, , , ,new_List.append(s)
, , , ,continue
, ,m = ord(s[-1]) # последний символ строки
# , ,print(s)
, ,if (m > 1071 and m < 1104) or m == 44: # от "а" до "я" + ","
, , , ,if i+1 >= len(old_List):
, , , , , ,break
, , , ,d = old_List[i+1].strip()
, , , ,if (d != ''):
, , , , , ,m = ord(d[0]) # первый символ следующей строки
, , , , , ,if (m > 1071 and m < 1104): # от "а" до "я"):
, , , , , , , ,new_List.append(s+' @')# помечаем строку для объединения с последующей
, , , , , ,else:# в обычном тексте вероятность, что строка
завершится "собачкой" очено мала, но ... тогда это будет ошибочное объединение
, , , , , , , ,new_List.append(s)
, , , ,else:
, , , , , ,new_List.append(s)
, ,else:
, , , ,new_List.append(s)
old_List.clear()
#for item in reversed(new_List): # второй проход
объединение помеченных строк
for item in new_List:
, ,if item == '':
, , , ,if SS != '':
, , , , , ,old_List.append(SS)
, , , , , ,SS = ''
, , , ,old_List.append(item)
, , , ,continue
, ,if FlagQ:
, , , ,SS = SS[:-1] + item
, , , ,FlagQ = item[-1] == '@'
, ,else:
, , , ,if SS != '':
, , , , , ,old_List.append(SS)
, , , , , ,SS = ''
, , , ,if item[-1] == '@': # последний символ строки
, , , , , ,FlagQ = True
, , , , , ,SS = item
, , , ,else:
, , , , , ,old_List.append(item)
if SS != '':
, ,old_List.append(SS)
#--------------------------------------
fn2="3_x.txt"
new_file=open(fn2,'w')
for i in old_List:
, , new_file.write(i+'\n')
new_file.close()
print('Done')
|#!/bin/env python
# -*- coding: utf-8 -*-
# Объединение абзацев разде-
# разделенных переносами
# 19.10.21
import sys, os
#--------------------------------------
def EndStr(s):
, ,SQ = ''
, ,for a in reversed(s):
, , , ,if a == ' ':
, , , , , ,return SQ[:-1]
, , , ,else:
, , , , , ,SQ = a+SQ
#--------------------------------------
old_List = [] # Сюда читается
new_List = [] # Промеждуточный список
#--------------------------------------
#FN = input('Введите имя файла:')
#fn1=path+FN
FN = '1.txt'
fb2_file=open(FN,'r')
#fb2_file=open(FN,'r', encoding='utf-8')
old_List=fb2_file.readlines()
fb2_file.close()
#--------------------------------------
SS = '' # Промежуточное хранение строки
SQ = '' # Начало слова "разор-
"разорванного" "странным" переносом
FlagQ = False
i = 0
Первый проход. Поиск "странных" переносов
for item in old_List:
, ,s = item.strip()# Обрезание пробелов
, ,if s == '':
, , , ,new_List.append(s)
, , , ,i += 1
, , , ,if i > len(old_List):
, , , , , ,new_List.append(item[i+1])
, , , , , ,break
, , , ,continue
, ,
, ,if (s[-1] == '-'): # последний символ строки
, , , ,SQ = EndStr(s) # следующая строка начинается с SQ
, , , ,if (SQ != None) and (SQ != '') and (old_List[i+1].find(SQ)==0):
, , , , , ,m = -(len(SQ)+1)
, , , , , ,new_List.append(s[:m]+'@') # помечаем строку для последующего объединения
, , , ,else:
, , , , , ,new_List.append(s)
, ,else:
, , , ,new_List.append(s)
, ,i += 1
, ,if i > len(old_List):
, , , ,new_List.append(item[i+1])
, , , ,break
old_List.clear()
# второй проход. соединение строк
#for item in reversed(new_List):
for item in new_List:
, ,if item == '':
, , , ,if SS != '':
, , , , , ,old_List.append(SS)
, , , , , ,SS = ''
, , , ,old_List.append(item)
, , , ,continue
# , ,print(item)
, ,if FlagQ:
, , , ,SS = SS[:-1] + item
, , , ,FlagQ = item[-1] == '@'
, ,else:
, , , ,if SS != '':
, , , , , ,old_List.append(SS)
, , , , , ,SS = ''
, , , ,if item[-1] == '@': # последний символ строки
, , , , , ,FlagQ = True
, , , , , ,SS = item
, , , ,else:
, , , , , ,old_List.append(item)
, , , , , , , ,
if SS != '':# запись последней строки
, ,old_List.append(SS)
#--------------------------------------
fn2="2_.txt"
new_file=open(fn2,'w')
for i in old_List:
, , new_file.write(i+'\n')
new_file.close()
print('Done')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
#-- скрипт для сборки абзацев из разрозненных строк ---
s = '' # строка коию будем записывать в список
L = [] # список для хранения выходного файла
i = 0 # указатель положения в файле
def RusBukva1(n): # обработка буквы «до»
, ,return ((n > 223) and (n < 256)) or (n==44) or (n==45)
def RusBukva2(n): # обработка буквы «после»
, ,return ((n > 223) and (n < 256))
f = open('alfredr.txt', 'rb') # открываем и читаем промежуточный файл
d = f.read()
f.close()
c13 = 2 # константа индицирующая наличие символа «13»
for n in d: # проверка промежуточного файла на наличие символа «13»
, ,if (n == 13):
, , , ,c13 = 3
, , , ,break
for n in d: # основной цикл проверки файла
, ,i +=1 # инкримент указателя положения в файле
, ,if (n == 10): # если конец строки
, , , ,if RusBukva1(d[i-c13]) and RusBukva2(d[i]): # проверяем «до» и «после»
, , , , s += ' ' # в строку пробел
, , , ,else:
, , , , L.append(s) # добавляем строку в список
, , , , s='' # подготовка пустой строки
, ,else:
, , , ,if n != 13:
, , , , , ,m = d[i-1] # эта строка и 6 строк ниже объясню еще ниже
, , , , , ,if (m > 191) and (m < 256):
, , , , , , , ,m += 848
, , , , , ,elif(m==184):
, , , , , , , ,m = 1105
, , , , , ,elif (m==151):
, , , , , , , ,m = 8212
, , , , , ,s += chr(m) # запись символа в строку
f = open('outtext.txt', 'w') # выходной файл
for etem in L: # просматриваем список и записываем в файл
, ,f.write(etem+'\n')
f.close()
print('OK!!!')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
fin = open('art.txt', 'r') # открываем исходный файл
out = open('outt.txt', 'w', encoding='cp1251') # подготавливаем промежуточный файл
for s in fin: # переписываем из файла в файл
, ,s = s.rstrip()
, ,out.write(s+'\n')
fin.close()
out.close()
print('Done')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
import base64
def getAttribute(Tag):
, ,s = Tag[Tag.find(' id=')+4:]
, ,s = s[s.find('"')+1:]
, ,s = s[:s.find('"')]
, ,return s
def parseBinaryContent(filename):
, ,
# filename = sys.argv[1]
, ,if filename[-4:] == '.fb2':
, , , , dirname = filename[:-4]+'_pic'
, ,else:
, , , , exit()
, ,if not os.path.isdir(dirname):
, , , ,os.mkdir(dirname)
, ,flag = False
, ,bina = False
, ,S = ''
, ,#------------------------
, ,path = os.getcwd()
, ,fin = os.path.join(path, filename)
, ,f = open(fin, 'rb')
, ,d = f.read()
, ,
, ,for n in d:
, , , ,if bina:
, , , , , ,if chr(n) == '<':
, , , , , , , ,print('5')
, , , , , , , ,dd = base64.urlsafe_b64decode(S) #()
, , , , , , , ,hh = open(os.path.join(dirname, name_Pic), 'wb')
, , , , , , , ,hh.write(dd)
, , , , , , , ,hh.close()
, , , , , , , ,bina = False
, , , , , ,else:
, , , , , , , ,S = S + chr(n)
, , , , , ,continue
, , , ,if chr(n) == '<': # начало тега
, , , , , ,
, , , , , ,flag = True
, , , , , ,Tag = ''
, , , ,else:
, , , , , ,if flag:
, , , , , , , ,if chr(n) == '>':
, , , , , , , , , ,
, , , , , , , , , ,flag = False
, , , , , , , , , ,if Tag.find('binary')> -1:
, , , , , , , , , , # print(Tag)
, , , , , , , , , , , ,bina = True
, , , , , , , , , , , ,S = ''
, , , , , , , , , , , ,name_Pic = getAttribute(Tag)
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , ,else:
, , , , , , , , , ,Tag = Tag + chr(n)
, , , , , ,
, , , , , , , ,
parseBinaryContent('Ho.fb2')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Удаление секций binary из файла xxxx.fb2.zip
import sys, os, io, zipfile
cover = ''
NameFb2 = ''
L=[]
#---------------------------------------------
def Del_Image():
, ,global NameFb2
, ,global L
, ,vi = io.StringIO()
, ,notbinary = True
, ,for i in L:
, , , ,if notbinary:
, , , , , ,if (i.find('
, , , , , , , ,if (i.find(cover)>=0):
, , , , , , , , , ,vi.write(i)
, , , , , , , ,else:
, , , , , , , , , ,notbinary = False
, , , , , ,else:
, , , , , , , ,vi.write(i)
, , , ,if i.find('=0:
, , , , , ,notbinary = True
, ,w = zipfile.ZipFile('^temp.zip', 'w', zipfile.ZIP_DEFLATED) # Создание нового архива
, ,w.writestr(NameFb2, vi.getvalue()) , ,
, ,w.close()
, ,vi.close()
#----------------------------------------
def o_zip(fn):
, ,global NameFb2
, ,global L
, ,z = zipfile.ZipFile(fn, 'r')
, ,filelist = z.namelist()
, ,for n in filelist:
, , , ,try:
, , , , , ,if n[-4:] == ".fb2":
, , , , , , , ,body = z.open(n)
, , , , , , , ,NameFb2 = n
, , , , , , , ,for line in body:
, , , , , , , , , ,L.append(str(line, 'UTF-8'))
, , , , , , , ,return True
, , , ,except:
, , , , , ,print( "error:", n )
, , , , , ,return False
#-------------------- main ------------------------
print('Удаление секций binary из файла xxxx.fb2.zip')
FileName = input('Введите имя файла:')
if FileName == '':
, , exit()
e = input('Удалить обложку? [y/n]')
if e == 'y':
, , cover = 'not'
else:
, , cover = 'cover.'
if os.path.isfile(FileName):
, ,if o_zip(FileName):
, , , ,Del_Image()
, , , ,os.remove(FileName)
, , , ,os.rename('^temp.zip', FileName)
, , , ,print("Done.")
, ,else:
, , , ,print("???")
else:
, ,print("File doesn't exists!")
# подготовка рисунка для fb2
import base64
# Автор: Abhishek Amin , ,Дата записи 09.04.2021
# + w_cat 05.07.22
fn = 'ce55.jpg'
with open(fn, 'rb') as binary_file:
, ,binary_file_data = binary_file.read()
, ,base64_encoded_data = base64.b64encode(binary_file_data)
, ,base64_message = base64_encoded_data.decode('utf-8')
, ,ff = fn + '.txt'
, ,f = open(ff, 'w')
, ,f.write('
, ,f.write(base64_message+'\n')
, ,f.write(''+'\n\n')
, ,f.close()
# осталось сделать:
# 1. определение типа файла
# , ,и изменение content-type в соответствии с типом.
# 2. упаковку группы файлов.
#!/bin/env python
# -*- coding: utf-8 -*-
# Удаление пустых папок
import sys, os
def del_empty_dirs(path):
, ,global co
, ,for d in os.listdir(path):
, , , ,a = os.path.join(path, d)
, , , ,if os.path.isdir(a):
, , , , , ,del_empty_dirs(a)
, , , , , ,if not os.listdir(a):
, , , , , , , ,co += 1
, , , , , , , ,os.rmdir(a) , , , , , ,
# ------------------------------ , , , , , ,
Mpath = os.getcwd()
co = 0
del_empty_dirs(Mpath)
print('Удалено '+str(co)+' пустых папок.')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# поиск одинаковых файлов
#
import sys, os
import hashlib #
ex = 'zip'#'fb2'#'txt'#'mp4'#'gif'#'jpg'
GFiles = []
co = 0
LOut = []
def SaveInList(L3):
, ,if len(L3) > 0:
, , , ,global co
, , , ,global LOut
, , , ,for i in L3:
, , , , , ,LOut.append(i+'\n')
, , , , , ,co += 1
, , , ,LOut.append('-----\n\n')
def ScanMd5(L2):
, ,if len(L2) > 0:
, , , ,L3 = []
, , , ,L2.sort()
, , , ,flag = False
, , , ,oldMd5 = ''
, , , ,OldFile = ''
, , , ,for i in L2:
, , , , , ,m = i.split('%')
, , , , , ,ZMd5= m[0]
, , , , , ,if (not flag) and (ZMd5 == oldMd5):
, , , , , , , ,flag = True
, , , , , , , ,L3.append(OldFile)
, , , , , ,if flag:
, , , , , , , ,if ZMd5 == oldMd5:
, , , , , , , , , ,L3.append(m[1])
, , , , , , , ,else:
, , , , , , , , , ,flag = False
, , , , , , , , , ,SaveInList(L3)
, , , , , , , , , ,L3.clear()
, , , , , , , , , ,
, , , , , ,oldMd5 = ZMd5
, , , , , ,OldFile = m[1]
, , , ,SaveInList(L3) #
, ,
def ScanSize(GFiles):
, ,if len(GFiles) > 0:
, , , ,L = []
, , , ,flag = False
, , , ,oldSize = ''
, , , ,OldFile = ''
, , , ,for i in GFiles:
, , , , , ,m = i.split('%')
, , , , , ,Zaize = m[0]
, , , , , ,if (not flag) and (Zaize == oldSize):
, , , , , , , ,flag = True
, , , , , , , ,L.append(getmd5(OldFile)+'%'+ OldFile)
, , , , , ,if flag:
, , , , , , , ,if Zaize == oldSize:
, , , , , , , , , ,L.append(getmd5(m[1])+'%'+ m[1])
, , , , , , , ,else:
, , , , , , , , , ,flag = False
, , , , , , , , , ,ScanMd5(L)
, , , , , , , , , ,L.clear()
, , , , , , , , , , , ,
, , , , , ,oldSize = Zaize
, , , , , ,OldFile = m[1]
, , , ,ScanMd5(L) #
#--------------------------------------------------
def getmd5(file_name):
## try
with open(file_name, "rb" ) as file_to_check:
data = file_to_check.read()
return hashlib.md5(data).hexdigest()
def parse_file(fn):
, ,global GFiles
, ,s=str(os.path.getsize(fn))+'%'#
, ,GFiles.append(s+fn)
, , , ,
def parse_dir(sSrc):
, ,global f_list
, ,for file in os.listdir(sSrc):
, , , ,# full pathname
, , , ,file=os.path.join(sSrc,file)
, , , ,if os.path.isdir(file):
, , , , , ,parse_dir(file)
, , , ,else:
, , , , , ,m = file.split('.')[-1] # извлечение расширения
, , , , , ,m = m.lower()
, , , , , ,if (m == ex):
, , , , , , , ,parse_file(file)
, , , , , , , ,
#--------------------------------------------------
path = os.getcwd()
parse_dir(path)
GFiles.sort()
ScanSize(GFiles) #
if co > 0:
f = open('merg_'+ex+'.txt', 'w')
for i in LOut:
, , f.write(i+'\n')
f.close()
print('Done '+ex+' -> '+str(co))
#!/bin/env python
# -*- coding: utf-8 -*-
import sys, os
from m_list import FindValue, PrintList, Books
list = []
def fb2zip(pa):
, ,p = pa.split('/')
, ,FindValue(p[-1],pa)
# -----------------
def GetListFiles(PathForWork):
, ,global list
, ,for file in os.listdir(PathForWork):
, , , ,path = os.path.join(PathForWork, file)
, , , ,ex = path.split('.')
, , , ,if not os.path.isdir(path): #
, , , , , ,if ex[-1].lower() == 'fb2':
, , , , , , , ,fb2zip(path)
, , , , , ,else:
, , , , , , , ,e = ex[-2]+ex[-1]
, , , , , , , ,if e.lower() == 'fb2zip':
, , , , , , , , , ,fb2zip(path)
, , , ,else: #
, , , , , ,GetListFiles(path) #
# -----------------
def CompareList():
, ,OldFile = ''
, ,OldPath = ''
, ,flag = False
, ,for it in Books:
, , , ,if (it[0] == OldFile):
, , , , , ,if not flag :
, , , , , , , ,flag = True
, , , , , , , ,list.append(OldPath)
, , , , , ,list.append(it[1])
, , , ,else:
, , , , , ,if flag:
, , , , , , , ,flag = False
, , , , , , , ,list.append('------------')
, , , , , ,OldFile = it[0]
, , , , , ,OldPath = it[1]
# -----------------
# Main:
Mpath = os.getcwd()
GetListFiles(Mpath)
CompareList()
if len(list) == 0:
, ,print('Дубликатов нет.')
else:
, ,new_file = open(fn2,'w')
, ,for i in list: #
, , , ,new_file.write(i)
, , , ,print i
, ,print 'Done!'
, ,new_file.close
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
import zipfile
import datetime
import xml.dom.minidom
# 7 avg 2021
# Запись списка книг в "небазу" (третья,2 версия)
#--------------------------------------------------
Books = []
Errror = []
siz = 0 # размер файла
countFiles = 0
book_title = ''
stroka = ''
replace_val = [('\\', '_'),('/', '_'),(':', '_'),('*', '_'),('?', '_'),('"', '_'),('<', '_'), ('>', '_'), ('|', '_')]
#--------------------------------------------------
def SaveList(fn, L, cco):
, ,if cco > 0:
, , , ,f = open(fn, 'w')
, , , ,for i in L:
, , , , , ,f.write(i)
, , , ,f.close()
def SaveError(fn, L):
, ,if len(L) > 0:
, , , ,f = open(fn, 'w')
, , , ,for i in L:
, , , , , ,f.write(str(i)+'\n')
, , , ,f.close()
#--------------------------------------------------
#**********************************************************************
def parse_fb2(fn):
, ,global Books
, ,global stroka
, ,global book_title
, , , ,
, ,if isinstance(fn, str):
, , , ,fn = open(fn)
, ,try:
, , , ,dom = xml.dom.minidom.parse(fn)
, , , ,
, ,except:
, , , ,print('Error in fb2:')
, , , ,Errror.append(fn)
, , , ,return False
, ,else:
, , , ,dom.normalize()
, , , ,node1=dom.getElementsByTagName("description")[0]
, , , ,titl=node1.getElementsByTagName("title-info")[0]
##
, , , ,book=titl.getElementsByTagName("book-title")[0]
, , , ,book_title = book.childNodes[0].nodeValue
, , , ,book_title = book_title.replace('|', '!')
, , , ,s = book_title +'|'
, , , ,
, , , ,au = ''
, , , ,try:
, , , , , ,for auto in titl.getElementsByTagName("author"):
, , , , , , , ,no1=auto.getElementsByTagName("last-name")[0]
, , , , , , , ,au = au + no1.childNodes[0].nodeValue
, , , , , , , ,no1=auto.getElementsByTagName("first-name")[0]
, , , , , , , ,fi = no1.childNodes[0].nodeValue
, , , , , , , ,au = au + '.'+ fi[0]+'^' , , , , , ,
, , , , , ,au = au[:-1]
, , , ,except:
, , , , , ,au = "NoName."
, , , ,s = s+au
, , , ,stroka = s +'|0|'
, , , ,return True
#**********************************************************************
#--------------------------------------------
def parse_zip(adr):
, ,z = zipfile.ZipFile(adr, 'r')
, ,filelist = z.namelist()
, ,filelist.sort()
, ,for n in filelist:
, , , , try:
, , , , , ,if n[-4:] == ".fb2":
, , , , , , , ,return parse_fb2(z.open(n))
, , , , except:
, , , , , ,print( "Errror:", n )
, , , , , ,return False
#--------------------------------------------------
def replace(line, old_new_num):
, ,for vals in old_new_num:
, , , , , ,# распаковываем кортеж
, , , , , ,old, new = vals
, , , , , ,line = line.replace(old, new)
, ,return line
def my_rename(adr,ph, ex):
, ,co = 0
, ,book_ti = book_title[:20]
# \ / : * ? " < > |
, ,book_ti = replace(book_ti, replace_val)
, ,
, ,a = '-' + book_ti + ex
, ,while os.path.isfile(os.path.join(ph, a)):
, , , ,co += 1
, , , ,a = '-' + book_ti +str(co)+ ex
# , ,print(a)
, ,os.rename(adr,os.path.join(ph, a))
, ,if ex == '.fb2':
, , , ,ex = 'f'
, ,else:
, , , ,ex = 'z'
, ,if co > 0:
, , , ,ex = str(co)+ex
, ,
, ,Books.append(stroka +ex+ '|'+str(siz)+'\n')
, ,
def parse_file(adr,ph):
, ,global siz # размер файла
, ,global countFiles
, ,flag = os.path.basename(adr)[0] != '-'
, ,siz = os.path.getsize(adr)
, ,m = adr.split(".")
, ,if (m[-1] == "zip") and (m[-2] == "fb2"):
, , , ,if flag and parse_zip(adr):
, , , , , , countFiles += 1
, , , , , , my_rename(adr,ph,'.fb2.zip')
, ,elif (m[-1] == "fb2"):
, , , ,if flag and parse_fb2(adr):
, , , , , , countFiles += 1
, , , , , , my_rename(adr,ph,'.fb2') , , , , , ,
, , , ,
def parse_dir(ph):
, ,dirlist = os.listdir(ph)
, ,dirlist.sort()
, ,for i in dirlist:
, , , ,adr = os.path.join(ph, i)
, , , ,if os.path.isdir(adr):
, , , , , ,parse_dir(adr)
, , , ,else:
#? , , , , , ,if os.path.getsize(i) > 0:
, , , , , , , ,parse_file(adr, ph)
#? , , , ,else:
#? , , , , , ,print("bad zip "+ i)
#----------------------------------------
path = os.getcwd()
, ,
#----------------------------------------
if os.path.isfile('NeBaza.txt'):
, ,f = open('NeBaza.txt','r')
, ,for i in f:
, , , , , ,Books.append(i)
, ,f.close()
parse_dir(path)
Books.sort()
SaveList('NeBaza.txt', Books, countFiles )
SaveError('Errror.txt', Errror)#
print( 'Done!')
print( 'Add '+ str(countFiles)+' files.')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
import xml.dom.minidom
import zipfile
# 31 Jul
# Ручная сортировка дубликатов в "небазе" (вторая версия)
#--------------------------------------------------
Books = []
tree = []
Ltree = []
LOut = []
co = 0
#--------------------------------------------------
def SaveList(fn, Li): # запись списка в файл
, , , ,f = open(fn, 'w')
, , , ,for i in Li:
, , , , , ,f.write(i)
, , , ,f.close()
#---------------------------------------
replace_val = [('\\', '_'),('/', '_'),(':', '_'),('*', '_'),('?', '_'),('"', '_'),('<', '_'), ('>', '_'), ('|', '_')]
def replace(line, old_new_num):
, ,for vals in old_new_num:
, , , , , ,# распаковываем кортеж
, , , , , ,old, new = vals
, , , , , ,line = line.replace(old, new)
, ,return line
#---------------------------------------
def my_name(book_title):
, ,book_ti = book_title[:20] # обрезание названия книги
, ,book = replace(book_ti, replace_val) # удаление из названия запрещенных символов
, ,return book
#--------------------------------------- , ,
def LoadFile(fn, Li): # Загрузка из файла в список
, ,if os.path.isfile(fn):
, , , ,f = open(fn,'r')
, , , ,for i in f:
, , , , , ,Li.append(i)
, , , ,f.close()
, ,else:
, , , ,print('I need '+ fn)
, , , ,exit()
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
def FindInTree(s, i):
, ,global tree
, ,global Books
, ,n = -1
, ,for k in tree:
, , , ,n += 1
, , , ,if k.find(s) > -1:
, , , , , ,tree.pop(n)
, , , , , ,Books.pop(i)
, , , , , ,break
, ,
#---------------------------------------
L=[]
#********************************************************
path = os.getcwd()
LoadFile('NeBaza.txt', Books)
#LoadFile('tree2.txt', tree)
for i in range(len(Books), 0, -1): # удаление из списка
, ,if (Books[i-1].find('|Y|')>0) or (Books[i-1].find('|Z|')>0):
# , , , ,print(Books[i-1])
, , , ,Books.pop(i-1) # ранее удаленных книг
for i in Books:
, ,m = i.split('|')
, ,L.append(m[4].strip()+'|-'+my_name(m[0])+'\n')
for i in range(len(L), 0, -1):
, ,FindInTree(L[i-1].strip(), i-1)
SaveList('net_v_base.txt',tree) , ,
SaveList('dead_B.txt',Books)
, ,
print( 'Done!')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
import xml.dom.minidom
import zipfile
# 31 Jul
# поиск книг содержащихся в небазе, но не существующих физически
#--------------------------------------------------
Books = []
tree = []
Ltree = []
LOut = []
co = 0
#--------------------------------------------------
def SaveList(fn, Li): # запись списка в файл
, ,if len(Li) > 0:
, , , ,f = open(fn, 'w')
, , , ,for i in Li:
, , , , , ,f.write(i)
, , , ,f.close()
#---------------------------------------
replace_val = [('\\', '_'),('/', '_'),(':', '_'),('*', '_'),('?', '_'),('"', '_'),('<', '_'), ('>', '_'), ('|', '_')]
def replace(line, old_new_num):
, ,for vals in old_new_num:
, , , , , ,# распаковываем кортеж
, , , , , ,old, new = vals
, , , , , ,line = line.replace(old, new)
, ,return line
#---------------------------------------
def my_name(book_title):
, ,book_ti = book_title[:20] # обрезание названия книги
, ,book = replace(book_ti, replace_val) # удаление из названия запрещенных символов
, ,return book
#--------------------------------------- , ,
def LoadFile(fn, Li): # Загрузка из файла в список
, ,if os.path.isfile(fn):
, , , ,f = open(fn,'r')
, , , ,for i in f:
, , , , , ,Li.append(i)
, , , ,f.close()
, ,else:
, , , ,print('I need '+ fn)
, , , ,exit()
#+++++++++++++++++++++++++++++++++++++++
def FindInTree(s, i):
, ,global tree
, ,global Books
, ,n = -1
, ,for k in tree:
, , , ,n += 1
, , , ,if k.find(s) > -1:
, , , , , ,tree.pop(n)
, , , , , ,Books.pop(i)
, , , , , ,break
#---------------------------------------
L = []
ln = 0
#---------------------------------------
def parse_dir(ph):
, ,global tree
, ,dirlist = os.listdir(ph)
, ,dirlist.sort()
, ,for i in dirlist:
, , , ,adr = os.path.join(ph, i)
, , , ,if os.path.isdir(adr):
, , , , , ,parse_dir(adr)
, , , ,else:
, , , , , ,hh = ph[ln:]
, , , , , ,tree.append(hh+'|'+ str(os.path.getsize(adr))+'|'+i+ '\n')
#********************************************************
path = os.getcwd()
ln = len(path) + 1
LoadFile('NeBaza.txt', Books)
parse_dir(path)
for i in range(len(Books), 0, -1): # удаление из списка
, ,if (Books[i-1].find('|Y|')>0) or (Books[i-1].find('|Z|')>0):
# , , , ,print(Books[i-1])
, , , ,Books.pop(i-1) # ранее удаленных книг
for i in Books:
, ,m = i.split('|')
, ,L.append(m[4].strip()+'|-'+my_name(m[0])+'\n')
for i in range(len(L), 0, -1):
, ,FindInTree(L[i-1].strip(), i-1)
, ,
for i in range(len(tree), 0, -1):
, ,s = tree[i-1].strip()
, ,if (s[-1] != 'p') and (s[-1] != '2'):
# , , , ,print(tree[i-1])
, , , ,tree.pop(i-1)
, ,
SaveList('net_v_base.txt',tree) , ,
SaveList('dead_B.txt',Books)
, ,
print( 'Done!')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
# 19 Avg
# сортировка книг по авторам
#--------------------------------------------------
Books = []
tree = []
LOut = [] # выходной список
#--------------------------------------- , ,
def LoadFile(fn, Li): # Загрузка из файла в список
, ,if os.path.isfile(fn):
, , , ,f = open(fn,'r')
, , , ,for i in f:
, , , , , ,Li.append(i)
, , , ,f.close()
, ,else:
, , , ,print('I need '+ fn)
, , , ,exit()
#--------------------------------------- , ,
def LoadFileM(fn, Li): # Загрузка из файла в список (модифицированно)
, ,if os.path.isfile(fn):
, , , ,f = open(fn,'r')
, , , ,for i in f:
, , , , , ,mmm = i.split('|')
, , , , , ,# автор[1]; название[0]; размер файла[4]
, , , , , ,Bo = mmm[1]+'|'+mmm[0]+'|'+mmm[4]
, , , , , ,if mmm[1] != 'NoName.':
, , , , , , , ,Li.append(Bo)
, , , ,f.close()
, ,else:
, , , ,print('I need '+ fn)
, , , ,exit()
#--------------------------------------------------
def SaveList(fn, Li): # запись списка в файл
, , , ,f = open(fn, 'w')
, , , ,for i in Li:
, , , , , ,f.write(i)
, , , ,f.close()
#**********************************************************************
def my_sort(L2): # Поиск авторов
, ,L3 = [] # Промежуточное хранилище
, ,flag = False
, ,n = -1
, ,OldAu = ''
, ,OldSt = ''
, ,Cap = ''
, ,for i in L2:
, , , ,m = i.split('|')
, , , ,n += 1
, , , ,Cap = m[0] # автор
, , , ,if (not flag) and (Cap == OldAu):
, , , , , ,flag = True
, , , , , ,L3.append(OldSt)
, , , ,if flag:
, , , , , ,if Cap == OldAu:
, , , , , , , ,L3.append(i)
, , , , , ,else:
, , , , , , , ,flag = False
, , , , , , , ,SaveInList(L3, OldAu)
, , , , , , , ,L3.clear()
, , , ,OldAu = Cap
, , , ,OldSt = i
, ,SaveInList(L3, OldAu) #
#+++++++++++++++++++++++++++++++++++++++++++++
replace_val = [('\\', '_'),('/', '_'),(':', '_'),('*', '_'),('?', '_'),('"', '_'),('<', '_'), ('>', '_'), ('|', '_')]
def replace(line, old_new_num):
, ,for vals in old_new_num:
, , , , , ,# распаковываем кортеж
, , , , , ,old, new = vals
, , , , , ,line = line.replace(old, new)
, ,return line
#---------------------------------------
def my_name(book_title):
, ,book_ti = book_title.strip() # исправление ввести в остальные скрипты
, ,book_ti = book_ti[:20] # обрезание названия книги
, ,book = replace(book_ti, replace_val) # удаление из названия запрещенных символов
, ,return book
#---------------------------------------
def ScanTree(s): # Поиск в дереве файлов по шаблону
, ,global tree
, ,c = -1
, ,for i in tree:
, , , ,c += 1
# , , , ,print(i)
# , , , ,print(s)
, , , ,if i.find(s) > -1:
, , , , , ,tree.pop(c)
, , , , , ,return i
, ,return ' '
#--------------------------------------------------
def SameFolder(L3): # проверка - нахождение книг в одной папке
, ,mmm = L3[0].split('|')
, ,s = mmm[0]
, ,for i in L3:
, , , ,mmm = i.split('|')
, , , ,if mmm[0] != s:
, , , , , ,return False
, ,return True
# ++++++++++++++++++++++++++++++++
def SaveInList(L3, au): # Перезапись из промежуточного в окончательный список дубликатов
, ,if len(L3) > 0:
, , , ,c = -1
, , , ,global LOut
, , , ,for k in L3: #
, , , , , ,c += 1
, , , , , ,mmm = k.split('|')
, , , , , ,nnn = mmm[2].strip()+'|-'+my_name(mmm[1])
, , , , , ,s = ScanTree(nnn)
, , , , , ,if s != ' ':
, , , , , , , , , ,hhh = s.split('|')
, , , , , , , , , ,L3[c] = hhh[0]+'|'+hhh[2]
, , , ,if SameFolder(L3):
, , , , , ,return
, , , ,L3.sort()
, , , ,LOut.append('-- '+au+' --\n')
, , , ,for i in L3:
, , , , , ,LOut.append(i)
#************************** main ******************************
LoadFileM('NeBaza3.txt', Books)
LoadFile('tree2.txt', tree)
Books.sort()
my_sort(Books)
SaveList('ccc.txt', LOut)
print( 'Done!')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
# 27 Jul 2021
#
#--------------------------------------------------
L = []
ln = 0
def parse_dir(ph):
, ,global L
, ,dirlist = os.listdir(ph)
, ,dirlist.sort()
, ,for i in dirlist:
, , , ,adr = os.path.join(ph, i)
, , , ,if os.path.isdir(adr):
, , , , , ,parse_dir(adr)
, , , ,else:
, , , , , ,adr = adr[ln:]
, , , , , ,L.append(adr+'\n')
#----------------------------------------
def SaveList(L):
, , , ,f = open('tree.txt', 'w')
, , , ,for i in L:
, , , , , ,f.write(i)
, , , ,f.close()
#----------------------------------------
path = os.getcwd()
ln = len(path) + 1
#----------------------------------------
parse_dir(path)
SaveList(L)
print( 'Done!')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
# 3 avg
#
#--------------------------------------------------
L = []
ln = 0
def parse_dir(ph):
, ,global L
, ,dirlist = os.listdir(ph)
, ,dirlist.sort()
, ,for i in dirlist:
, , , ,adr = os.path.join(ph, i)
, , , ,if os.path.isdir(adr):
, , , , , ,parse_dir(adr)
, , , ,else:
, , , , , ,hh = ph[ln:]
, , , , , ,L.append(hh+'|'+ str(os.path.getsize(adr))+'|'+i+ '\n')
#----------------------------------------
def SaveList(L):
, , , ,f = open('tree2.txt', 'w')
, , , ,for i in L:
, , , , , ,f.write(i)
, , , ,f.close()
#----------------------------------------
path = os.getcwd()
ln = len(path) + 1
#----------------------------------------
parse_dir(path)
SaveList(L)
print( 'Done!')
#!/usr/bin/env python
# -*- codning: utf-8 -*-
import sys, os
import zipfile
# Извлечение из архивов в папке
# Изготовление списка книг в текущей папке
#-----------------------------------------------
List = []
Count = 0
def parse_zip(fn): # обработка zip
, ,global path
, ,global Count
, ,z = zipfile.ZipFile(fn, 'r')
, ,z.extractall(path)
, ,Count += 1
def parse_file(fn): # обработка файла
, ,m = fn.split(".")[-1]
, ,if (m == "zip"): # если zip
, , , ,parse_zip(fn)
, , , ,
def parse_dir(fn): # сканирование папки
, ,dirlist = os.listdir(fn)
, ,dirlist.sort()
, ,for a in dirlist:
, , , ,if os.path.getsize(a) > 0:
, , , , , , , ,parse_file(a)
#-------------------------
def SaveList():
, ,f = open('list.txt', 'w', encoding="utf-8")
, ,for i in List:
, , , ,f.write(i)# 'cp1251' '\n'
, ,f.close()
def ScanDir(fn): # сканирование папки
, ,dirlist = os.listdir(fn)
, ,dirlist.sort()
, ,for a in dirlist:
, , , ,if not os.path.isdir(a):
, , , , , ,a = a.lower()
, , , , , ,m = a.split(".")[-1]
, , , , , ,if (m == "fb2"): # , , , , , , , , or (m == "zip")
, , , , , , , ,a = os.path.join(fn, a)
, , , , , , , ,List.append(a+'\n')
#--------------------------------------------------
path = os.getcwd()
parse_dir(path) # сканирование текущей папки
print('Файлов извлечено '+str(Count))
ScanDir(path)
SaveList()
print('ok??')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
# 18.01.22
#--------------------------------------------------
def SaveList():
, ,f = open('lib.fb2', 'w', encoding="utf-8")
, ,for i in Books:
, , , ,f.write(i)# 'cp1251' '\n'
, ,f.close()
Books = []
conutBooks = 0
LAllNotes = []
'''
def AddNotes(LNotes):
, ,if len(LNotes) > 0:
, , , ,f = open('Notes'+str(conutBooks)+'.txt', 'w', encoding="utf-8")
, , , ,for i in LNotes:
, , , , , ,i = i.replace('id="n','id="'+ str(conutBooks)+ '_n')
, , , , , ,f.write(i)
, , , ,f.close()
'''
def AddNotes(LNotes):
, ,if len(LNotes) > 0:
, , , ,for i in LNotes:
, , , , , ,i = i.replace('id="n','id="'+ str(conutBooks)+ '_n')
, , , , , ,LAllNotes.append(i)
def addFb2(fn, first):
, ,global Books
, ,global conutBooks
, ,LList = []
, ,sBook_title = ''
, ,bBook_title = False
, ,bWait_notes = False
, ,bNotes = False
, ,LNotes = []
, ,conutBooks += 1
, ,if os.path.isfile(nfile):
, , , ,with open(fn, encoding="utf8") as f:
, , , , , ,LList = f.readlines()
, , , ,for i in LList:
, , , , , ,if bNotes:
, , , , , , , ,if i.find('
-1:
, , , , , , , , , ,AddNotes(LNotes)
, , , , , , , , , ,break
, , , , , , , ,else:
, , , , , , , , , ,LNotes.append(i)
, , , , , , , ,continue
, , , , , ,if bWait_notes:
, , , , , , , ,if i.find('
, , , , , , , , , ,bNotes = True
, , , , , , , , , ,LNotes.append(i)
, , , , , , , ,if i.find('
, , , , , , , , , ,break
, , , , , , , ,continue
, , , , , ,if not first: #
, , , , , , , ,if bBook_title:
, , , , , , , , , ,n = i.find('
, , , , , , , , , ,if ( n == -1):
, , , , , , , , , , , ,sBook_title = sBook_title + ' ' + i.strip()
, , , , , , , , , , , ,continue
, , , , , , , , , ,else:
, , , , , , , , , , , ,sBook_title = sBook_title + ' ' + i[:n]
, , , , , , , , , , , ,bBook_title = False
, , , , , , , , , , , ,
, , , , , , , ,n = i.find(' , , , , , , , ,if n > -1:
, , , , , , , , , ,sBook_title = i[n+12:]
, , , , , , , , , ,n = sBook_title.find('
, , , , , , , , , ,if n > -1:
, , , , , , , , , , , ,sBook_title = sBook_title[:n]
, , , , , , , , , , , ,bBook_title = False
, , , , , , , , , ,else:
, , , , , , , , , , , ,sBook_title = sBook_title + ' ' + i.strip()
, , , , , , , , , , , ,bBook_title = True
, , , , , , , , , , , ,continue
, , , , , , , ,n = i.find('
, , , , , , , ,if n > -1:
, , , , , , , , , ,i = i[n:]
, , , , , , , , , ,n = i.find('>')
, , , , , , , , , ,i = i[n+1:]
, , , , , , , , , ,
, , , , , , , , , ,Books.append('\n*%%%%%%%* '+str(conutBooks)+'\n')
, , , , , , , , , ,#print('%%%%%%%')
, , , , , , , , , ,bb = sBook_title.strip()
, , , , , , , , , ,#print(bb)
, , , , , , , , , ,Books.append('
'+bb+'\n
'), , , , , , , , , ,Books.append(i)
, , , , , , , , , ,first = True
, , , , , ,else:
, , , , , , , ,n = i.find('
, , , , , , , ,if n > -1:
, , , , , , , , , ,i = i[:n]
, , , , , , , , , ,Books.append(i)
, , , , , , , , , ,#break
, , , , , , , , , ,bWait_notes = True
, , , , , , , ,else:
, , , , , , , , , ,if i.find('-1:
, , , , , , , , , , , ,i = i.replace('href="#','href="#'+ str(conutBooks)+ '_')
, , , , , , , , , ,Books.append(i)
#--------------------------------------------------
nfile = "list.txt"
first = True
if os.path.isfile(nfile): # encoding='cp1251'
with open(nfile, encoding="utf8") as f:
, , Li = f.readlines()
for i in Li:
, , addFb2(i.strip(), first)
, , first = False
, ,
Books.append('\n')
if len(LAllNotes) > 0:
, ,Books.append('
, ,Books.append('
Примечания
, ,for i in LAllNotes:
, , , ,Books.append(i)
, ,Books.append('
\n')
, ,
Books.append('\n')#
SaveList()
print( 'Done!')
#!/usr/bin/env python
# -*- codning: utf-8 -*-
import sys, os
import zipfile
import xml.dom.minidom
# Подсчет числа секций и числа символов в fb2
#----------------------------------------------
path = os.getcwd()
count_s = 0
count_t = 0
count_b = 0
#-------------------------------------
def sect(el):
, ,global count_s
, ,global count_t
, ,childList=el.childNodes
, ,for child in childList:
, , , ,if child.nodeName == 'p':
, , , , , ,text = child.childNodes[0].nodeValue
, , , , , ,if text != None:
, , , , , , , ,count_t += len(text)
, , , ,if child.nodeName == 'section':
, , , , , ,count_s += 1
, , , , , ,sect(child)
#---------------------------------------
def parse_fb2(fn):
, ,global count_b , ,
, ,dom = xml.dom.minidom.parse(fn);
, ,dom.normalize()
, ,n_body=dom.getElementsByTagName("body")[0]
, ,sect(n_body)
, ,fb=dom.getElementsByTagName("FictionBook")[0]
, ,childList=fb.childNodes
, ,for child in childList:
# , , print(child.nodeName)
, , , , if child.nodeName == 'binary':
, , , , , ,text = child.childNodes[0].nodeValue
, , , , , ,if text != None:
, , , , , , , ,count_b += len(text)
def MyPrint(adr):
, ,print(adr)
, ,print('section '+str(count_s))
, ,print('text '+str(count_t))
, ,print('pic '+str(count_b))
, ,print('size file '+ str(os.path.getsize(adr)))
def parse_zip(adr):
, ,z = zipfile.ZipFile(adr, 'r')
, ,filelist = z.namelist()
, ,filelist.sort()
, ,for n in filelist:
, , , ,if n[-4:] == ".fb2":
, , , , , ,parse_fb2(z.open(n))
def parse_file(adr):
, ,if not os.path.isfile(adr):
, , , ,print('File not exists')
, , , ,return
, ,m = adr.split(".")
, ,if (m[-1] == "zip") and (m[-2] == "fb2"):
, , , , parse_zip(adr)
, ,elif (m[-1] == "fb2"):
, , , , parse_fb2(adr)
, ,
while True:
, ,qu = input('Введите ')
# , ,qu = '6.fb2.zip'
, ,a = os.path.join(path, qu)
, ,parse_file(a)
, ,MyPrint(a) , , , , , ,
, ,print('OK!!!')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
# 2 авг
#
#--------------------------------------------------
L = []
co = 0
#--------------------------------------- , ,
def LoadFile(fn, Li): # Загрузка из файла в список
, ,if os.path.isfile(fn):
, , , ,f = open(fn,'r')
, , , ,for i in f:
, , , , , ,Li.append(i)
, , , ,f.close()
, ,else:
, , , ,print('I need '+ fn)
, , , ,exit()
#--------------------------------------
def myDelFile(L):
, ,global co
, ,for i in L:
, , , ,n = i.strip()
, , , ,if os.path.isfile(n):
, , , , , ,os.remove(n)
, , , , , ,co += 1
, , , ,else:
, , , , , ,print(n)
#----------------------------------------
path = os.getcwd()
ln = len(path) + 1
#----------------------------------------
LoadFile('ddel.txt', L)
myDelFile(L)
print( 'Done '+ str(co))
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
# конвертация папки с файлами в структуру fb2
#--------------------------------------------------
List = []
#---
def SaveList(fn, L):
, ,f = open(fn, 'w', encoding="utf-8")
, ,for i in L:
, , , ,f.write(i)
, ,f.close()
#**************************************************
def my_str(s):
, ,s=s.replace('\t',' , ,')
, ,s=s.replace(' ',' , ,')
, ,s=s.replace('**','>')# вставьте вместо ** символ "больше"
, ,s=s.replace('**','<')# вставьте вместо ** символ "меньше"
# s = s.rstrip
, ,s = '
' + s + '
\n', ,return s
, ,
def parse_file(ph):
, ,global List
, ,si = os.path.getsize(ph)
, ,if si > 0:
, , , ,List.append('
, , , ,List.append('
' + os.path.basename(ph)+ '
, , , ,f =open(ph, encoding="utf-8")
, , , ,Li=f.readlines()
, , , ,for i in Li:
, , , , , ,s = my_str(i)
, , , , , ,List.append(s)
, , , ,f.close()
, , , ,List.append('
, ,
def parse_dir(ph):
, ,global List
, ,dirlist = os.listdir(ph)
, ,if len(dirlist) > 0:
, , , ,List.append('
, , , ,List.append('
' + os.path.basename(ph)+ '
, , , ,
# , , dirlist.sort()
, , , ,for i in dirlist:
, , , , , ,m = os.path.join(ph, i)
, , , , , ,if os.path.isdir(m):
, , , , , , , ,parse_dir(m)
, , , , , ,else:
, , , , , , , ,parse_file(m)
, , , ,List.append('
\n')
def GetHead(myFile):
, ,global List
, ,f =open(myFile, encoding="utf-8")
, ,Li=f.readlines()
, ,for i in Li:
, , , ,List.append(i)
, ,f.close()
#----------------------------------------
path = os.getcwd()
folder = 'Arc'
if not os.path.isdir(folder):
, ,sys.exit(folder + ' - does not exist')
myFolder = os.path.join(path, folder)
myFile = os.path.join(myFolder, 'head.txt')
if os.path.isfile(myFile):
, ,GetHead(myFile)
List.append('\n
List.append('
'+folder)
List.append('
\n')
myFile = os.path.join(myFolder, 'list.txt')
if os.path.isfile(myFile):
, ,f =open(myFile, encoding="utf-8")
, ,Li=f.readlines()
, ,for i in Li:
, , , ,i = i.strip()
, , , ,if i == '':
, , , , , ,continue
, , , ,m = os.path.join(myFolder, i)
, , , ,if os.path.isdir(m):
, , , , , ,parse_dir(m)
, , , ,else:
, , , , , ,if os.path.isfile(m):
, , , , , , , ,parse_file(m) , , , ,
, ,f.close()
List.append('\n')
List.append('')
List.append('')
SaveList('fb.fb2', List)
print( 'Done!')
#!/usr/bin/env python
# -*- codning: utf-8 -*-
import sys, os
# проверка структуры файла fb2
#----------------------------------------------
file = 'mesto_pod_solncem.fb2'
count = 0 # счетчик строк
flag = False # признак анализа тега
S = '' # место для обработанного тега
Tag = '' # место для тега
L = [] # стек
'''
with open(file, encoding="utf8") as f:
, ,LList = f.readlines()
for i in LList:
, ,count += 1
, ,if i.find('section') > -1:
, , , ,print(count)
, , , ,print(i)
f.close()
'''
count = 0 # счетчик строк
f = open(file, 'rb') # комментарий ниже
d = f.read()
for n in d:
, ,if n == 10: # символ завершения строки
, , , ,count += 1 # + в счетчик строк
, ,elif chr(n) == '<': # начало тега
, , , ,flag = True
, , , ,Tag = '' # подготовка места для тега
, ,else:
, , , ,if flag: # читаем тег
, , , , , ,if chr(n) == '>': # провека на конец тега, если да:
, , , , , , , ,S = Tag.split(' ')[0] # отбрасывание возможных параметров
, , , , , , , ,flag = False
, , , , , , , ,if S[0] == '/': # проверка на закрывающий тег
, , , , , , , , , ,S = S[1:] # удаление слеша
, , , , , , , , , ,Lo = L.pop() # чтение из стека
, , , , , , , , , ,if Lo[0] != S: # сообщение об ошибке
, , , , , , , , , , , ,print('Teg = "'+Lo[0]+'" begin in str = '+ str(Lo[1]+1))
, , , , , , , , , , , ,print('Не соответствует')
, , , , , , , , , , , ,print('Teg ="' +S+ '"end in str = '+ str(count +1))
, , , , , , , , , , , ,f.close()
, , , , , , , , , , , ,sys.exit()
, , , , , , , ,else:
, , , , , , , , if Tag[-1] != '/': # обработка одинарных тегов
, , , , , , , , , , Lo = [S, count] # подготовка для записи в стек
, , , , , , , , , , L.append(Lo) # запись в стек
, , , , , ,else:
, , , , , , , ,Tag = Tag + chr(n) # добавление символа к тегу
f.close()
print('OK!!!') # сообщение об удачной проверке.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
# 7 avg
# Переименование всех файлов в цифру
#---------------------------------------
count = 0
pref = '' # при желании вставить префикс к имени файла
#---------------------------------------
def rename_fb2(old, ph):
, ,global count
, ,count +=1
# вставить проверку существования файла с выбором следующего имени файла
, ,os.rename(old,os.path.join(ph, pref + str(count)+'.fb2'))
#---------------------------------------
def rename_zip(old, ph):
, ,global count
, ,count +=1
# вставить проверку существования файла с выбором следующего имени файла
, ,os.rename(old,os.path.join(ph, pref + str(count)+'.fb2.zip'))
#---------------------------------------
def rename_file(adr, ph):
, ,m = adr.split(".")
, ,if (m[-1] == "zip") and (m[-2] == "fb2"):
, , , , rename_zip(adr, ph)
, ,elif (m[-1] == "fb2"):
, , , , rename_fb2(adr, ph)
#---------------------------------------
def scan_dir(ph):
, ,global L
, ,dirlist = os.listdir(ph)
, ,dirlist.sort()
, ,for i in dirlist:
, , , ,adr = os.path.join(ph, i)
, , , ,if os.path.isdir(adr):
, , , , , ,scan_dir(adr)
, , , ,else:
, , , , , ,rename_file(adr, ph)
#********************************************************
path = os.getcwd()
scan_dir(path)
, ,
print( 'Done!')
3. Поехали
в папке "3":
* spas2.py - скрипт замены отступов точками
* _my_zip.py - Упаковка файлов fb2 в архивы zip
?? упорядоченный список имен файлов книг
5. Пасьянс из fb2
в папке "5":
* main_ok.py - раскладка файлов fb2 по папкам
6. Ремонт fb2
в папке "6":
1. * fb2err4.py - проверка структуры файла fb2
2. * fb2errors.py - составление списка книг с повреждением структуры (проверяется заданная папка и вложения)
3. * moveIn.py - перемещение файлов по списку в рабочую папку
4. * moveOut.py - перемещение файлов по списку из рабочей папки по местам жительства
5. * un_zip.py - распаковка
7. Вне плана
в папке "7":
0. utf8-1251.py - перекодировка файла (нужен для скрипта str2parag.py)
1. str2parag.py - сборка абзацев из разрозненных строк
2. j_par.py - Объединение абзацев (версия 10.10.21)
3. perenos.py - Объединение абзацев разде-
, , , , , , |# разделенных переносами
8. Image
В папке "8 Images":
* base64_pic.py - получение рисунка из fb2;
* del_pic.py - удаление из fb2.zip всех рисунков
* pic_base64.py - кодирование рисунка для вставки в fb2
9. Без базы
Приложение: Файл "ganres.py" - считаю не актуальным и выкладывать не буду
10. Сканирование библиотеки
В папке "10": поиск файлов одинаковых по размеру и содержимому
* Mer.py - # поиск одинаковых файлов 'zip'#'fb2'#'txt'#'mp4'#'gif'#'jpg'
* del_empty_dir.py - Удаление пустых папок
* scan7i.py -
scan_lib.py Скрипт для записи библиотеки в "небазу"
12. Использование 2 ( набор скриптов для поиска двойников)
tree.py изготовление файла содержащего все адреса файлов в текущей папке
dubl_books.py Ручная сортировка дубликатов в "небазе" (вторая версия)
13. Трупы в библиотеке
deadBooks.py поиск книг содержащихся в небазе, но не существующих физически
MarkDelBook.py изменение оценки на метку "удаленная книга"
14. Сортировка по авторам
sortbyauthor.py сортировка книг по авторам
16. Объединение
в папке "16 Obedinenie":
* fb2_list.py # Извлечение из архивов в папке # Изготовление списка книг в текущей папке
* join_fb2.py # объединение fb2 файлов перечисленных в файле list.txt
-------------------------------------------
В папке "Other":
count_fb_z.py - Подсчет числа секций и числа символов в fb2
* delbylist.py - удаление файлов по списку заданному в файле 'delfiles.txt' !Внимание! применять осмысленно!
* rename2number.py - захотелось переименовать файлы с книгами в виде "1.fb2; 2.fb2; ... 203456.fb2" !Внимание! применять осмысленно!
* dir_fb2.py - преобразование заданной папки и ее содержимого в файл fb2