Arch
read_me.txt
Здравствуйте.
Данный файл является приложением к опусу «Python в библиотеке». Здесь собраны основные скрипты упомянутые в учебнике.
Основная «фишка» данного текста такая: «легким движением» выполнения скрипта «fb2_dir.py» содержимое этого файла скопируется в папки и файлы со скриптами.
Т.е. при успешном выполнении нижеследующих действий в Вашем распоряжении появятся исходные коды скриптов.
Действия следующие:
1. любым способом скопируйте скрипт «fb2_dir.py» из файла fb2 в отдельный файл.
2. замените блоки « , ,» на блок из четырех пробелов.
3. поместите данный файл и скрипт «fb2_dir.py» в отдельную папку (желательно).
4. запустите скрипт. Если все сделано правильно, появится папка с исходниками
5. вполне разумно ВЫ можете опасаться злонамеренных действий ужасного хакера w_cat.
Предварительно внимательно проверьте предлагаемые скрипты, от этого все только выиграют.
w_cat
PS
Да, ежели не будет протестов от читателей, я намереваюсь регулярно обновлять этот файл, пополняя и исправляя его содержимое.
13.07.2022
fb2_dir.py
#!/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()3
spas2.py
_my_zip.py
5
main_ok.py
6