Приложение к «Python в библиотеке» — страница 5 из 7

dead_books.py

#!/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!')

dead_books2.2.py

#!/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!')

dubl_auto.py

#!/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!')

tree.py

#!/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!')

tree2.py

#!/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!')

16 Obedinenie