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('</section')==0:
, , , , , ,Other = False
, , , ,continue
, ,if text_f:
, , , ,if i.find('</section')==0:
, , , , , ,text_f = False
, , , , , ,SaveList(file_name, List)
, , , ,elif i.find('<title>')==0:
, , , , , ,s = i[10:-13]
, , , , , ,file_name = os.path.join(cur_dir, s)
, , , ,elif i.find('</p>')>-1:
, , , , , ,i = ''
, , , ,else:
, , , , , ,List.append(i[3:]) , ,
, , , ,continue
, , , ,
, ,if folder:
, , , ,if i.find('<title>')==0:
, , , , , ,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('<section')==0:
, , , ,if i.find('type="d"')> -1:
, , , , , ,folder = True
, , , ,else:
, , , , , ,if i.find('type="f"')> -1:
, , , , , , , ,text_f = True
, , , , , , , ,List.clear()
, ,if i.find('</section')==0:
, , , ,if len(stack)>0:
, , , , , ,stack.pop(0)
, , , , , ,if len(stack)>0:
, , , , , , , ,cur_dir = stack[0]
print( 'Done!')
Конец скрипта fb2_dir.py
3
spas2.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
_my_zip.py
#!/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!')
5
main_ok.py
#!/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()
, , ,
Последние комментарии
10 минут 55 секунд назад
33 минут 37 секунд назад
34 минут 10 секунд назад
36 минут 50 секунд назад
47 минут 13 секунд назад
49 минут 54 секунд назад