, , 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()
6
fb2err4.py
#!/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: # сообщение об ошибке