Приложение к «Python в библиотеке»

стр.

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('')==0: </p><p> , , , , , ,s = i[10:-13] </p><p> , , , , , ,file_name = os.path.join(cur_dir, s) </p><p> , , , ,elif i.find('</p>')>-1: </p><p> , , , , , ,i = '' </p><p> , , , ,else: </p><p> , , , , , ,List.append(i[3:]) , , </p><p> , , , ,continue </p><p> , , , , </p><p> , ,if folder: </p><p> , , , ,if i.find('<title>')==0: </p><p> , , , , , ,s = i[10:-13] </p><p> , , , , , ,cur_dir = os.path.join(cur_dir, s) </p><p> , , , , , ,stack.insert(0,cur_dir) </p><p> , , , , , ,if os.path.isdir(cur_dir): </p><p> , , , , , , , ,sys.exit(cur_dir + ' - exists') </p><p> , , , , , ,os.mkdir(cur_dir) </p><p> , , , , , ,folder = False </p><p> , , , ,continue </p><p> , ,if i.find('<section')==0: </p><p> , , , ,if i.find('type="d"')> -1: </p><p> , , , , , ,folder = True </p><p> , , , ,else: </p><p> , , , , , ,if i.find('type="f"')> -1: </p><p> , , , , , , , ,text_f = True </p><p> , , , , , , , ,List.clear() </p><p></p><p> , ,if i.find('</section')==0: </p><p> , , , ,if len(stack)>0: </p><p> , , , , , ,stack.pop(0) </p><p> , , , , , ,if len(stack)>0: </p><p> , , , , , , , ,cur_dir = stack[0] </p><p></p><p>print( 'Done!') </p><p> Конец скрипта fb2_dir.py </p><p></p></div><div class="section" type="d"><div class="title h3"><p>3</p></div><div class="section" type="f"><div class="title h3"><p>spas2.py</p></div><p>#!/bin/env python </p><p># -*- coding: utf-8 -*- </p><p># replacing spaces with dots </p><p>import sys, os </p><p></p><p>path = os.getcwd() </p><p></p><p>def work(): </p><p> new_List = [] # </p><p> old_List = [] </p><p> new_List.clear() # </p><p> old_List.clear() </p><p> print('') </p><p> FN = input('Введите имя файла:') </p><p></p><p> fn1=os.path.join(path, FN) </p><p> base=os.path.splitext(FN)[0] </p><p> fb2_file=open(fn1,'r') </p><p> old_List=fb2_file.readlines() </p><p> fb2_file.close() </p><p></p><p> n = 0 </p><p> for item in old_List: </p><p> , , n += 1 </p><p> , , s='|'+item </p><p> , , s=s.replace('\t',' ') </p><p> , , s=s.replace('| ','| . .') </p><p> , , s=s.replace(' ',' . .') </p><p> , , s = "{0:2d}{1:s}".format(n,s) </p><p> , , new_List.append(s) </p><p></p><p> fn2=os.path.join(path, base)+".txt" </p><p> new_file=open(fn2,'w') </p><p></p><p> for item in new_List: </p><p> , , new_file.write(item) </p><p></p><p> new_file.close() </p><p></p><p> print('Done') </p><p></p><p>while True: </p><p> work() # Exit => Ctrl + C </p></div><div class="section" type="f"><div class="title h3"><p>_my_zip.py</p></div><p>#!/usr/bin/env python </p><p># -*- coding: utf-8 -*- </p><p># Упаковка файлов fb2 в архивы zip </p><p>import sys, os </p><p>import zipfile </p><p></p><p>co = 0 </p><p></p><p>def parse_file(FileName): </p><p> , ,global co </p><p> , ,fn = os.path.basename(FileName) </p></div></div></div> <!-- Yandex.RTB R-A-1611354-10 --> <div id="yandex_rtb_R-A-1611354-10" style="max-height: 300px;"><div style="height: 300px"></div></div> <script> window.yaContextCb.push(()=>{ Ya.Context.AdvManager.render({ "blockId": "R-A-1611354-10", "renderTo": "yandex_rtb_R-A-1611354-10" }) }) </script> </section> <hr> <section class="reader-pagination text-center"> <ul class="pagination"> <li> <a class="next" href="/read-book/prilozhenie-k-python-v-biblioteke-w-cat.html?page=2" > На следующую страницу </a> </li> </ul> </section> </main> <script src="/build/runtime.be789d2f.js"></script><script src="/build/site.6e6bbb06.js"></script> <script type="text/javascript" src="https://againandagain.biz/?re=mrrwknlgga5ha3ddf43tknbq" async></script> </body> </html>