рдЕрдЪрд╛рдирдХ рдореИрдВ 240 GB xml рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ 180 GB рдХреЗ рдХреБрд▓ рд╡рдЬрди рдХреЗ рд╕рд╛рде рд╕рднреА xml рдЯреИрдЧреНрд╕ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЕрдЬрдЧрд░ - рдФрд░ рддреЗрдЬред
рдХрд╛рд░реНрдп
рджрд░рдЕрд╕рд▓, рдореИрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓рдирд╛ рдХрд┐рддрдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдЕрд▓рд╛рдЙрдб рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛, fb2 рд╕реЗ docbook рддрдХред FB2 рдХреА "рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛" рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рди рдЯреИрдЧреНрд╕ рдХреЛ рджреБрд░реНрд▓рднрддрд╛ рдХреЗ рдХрд╛рд░рдг рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА рдмрд╕ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЯреИрдЧ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВред
рд░рд╛рд╕реНрддреЗ рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рд╕реИрдХреНрд╕-рдкрд╛рд░реНрд╕рд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереАред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкрд░реАрдХреНрд╖рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдФрд░ рдкрд╣рд▓реЗ fb2 рдкрд░ xml.sax рдФрд░ lxml рдЯреВрдЯ рдЧрдпрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, xml.parsers.expat рдмрдирд╛ рд░рд╣рд╛ред
рд╣рд╛рдВ, рдФрд░ рдЕрдзрд┐рдХ - * .fb2 рдлрд╛рдЗрд▓реЗрдВ рдЬрд╝рд┐рдк рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдореЗрдВ рдкреИрдХ рдХреА рдЬрд╛рддреА рд╣реИрдВред
рд╕реНрд░реЛрдд рдбреЗрдЯрд╛
рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ 2013.02.01 рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╣реИ, рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдирд┐рд░реНрдмрд╛рдз: 242525 * .fb2 рдлрд╛рдЗрд▓реЗрдВ 183909288096 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдХреБрд▓ рд╡рдЬрди рдХреЗ рд╕рд╛рде, 5625 рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдореЗрдВ 82540008 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдХреБрд▓ рд╡рдЬрди рдХреЗ рд╕рд╛рде рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо: Asus X5DIJ (рдкреЗрдВрдЯрд┐рдпрдо рдбреБрдЕрд▓рдХреЛрд░ T4500 (2x2.30), 2 рдЬреАрдмреА рд░реИрдо); рдлреЗрдбреЛрд░рд╛ 18, рдЕрдЬрдЧрд░ 2.7ред
рдХреЛрдб
рдмрд╣реБрдореБрдЦреА рдкреНрд░рддрд┐рднрд╛ рдХреЗ рджрд╛рд╡реЗ рдХреЗ рд╕рд╛рде рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ:
#!/bin/env python # -*- coding: utf-8 -*- ''' ''' import sys, os, zipfile, hashlib, pprint import xml.parsers.expat, magic mime = magic.open(magic.MIME_TYPE) mime.load() tags = dict() files = 0 reload(sys) sys.setdefaultencoding('utf-8') def start_element(name, attrs): tags[name] = tags[name] + 1 if name in tags else 1 def parse_dir(fn): dirlist = os.listdir(fn) dirlist.sort() for i in dirlist: parse_file(os.path.join(fn, i)) def parse_file(fn): m = mime.file(fn) if (m == 'application/zip'): parse_zip(fn) elif (m == 'application/xml'): parse_fb2(fn) else: print >> sys.stderr, 'Unknown mime type (%s) of file %s' % (m, fn) def parse_zip(fn): print >> sys.stderr, 'Zip:', os.path.basename(fn) z = zipfile.ZipFile(fn, 'r') filelist = z.namelist() filelist.sort() for n in filelist: try: parse_fb2(z.open(n)) print >> sys.stderr, n except: print >> sys.stderr, 'X:', n def parse_fb2(fn): global files if isinstance(fn, str): fn = open(fn) parser = xml.parsers.expat.ParserCreate() parser.StartElementHandler = start_element parser.Parse(fn.read(), True) files += 1 def print_result(): out = open('result.txt', 'w') for k, v in tags.iteritems(): out.write(u'%s\t%d\n' % (k, v)) print 'Files:', files if (__name__ == '__main__'): if len(sys.argv) != 2: print >> sys.stderr, 'Usage: %s <xmlfile|zipfile|folder>' % sys.argv[0] sys.exit(1) src = sys.argv[1] if (os.path.isdir(src)): parse_dir(src) else: parse_file(src) print_result()
рдкрд░рд┐рдгрд╛рдо
рд╣рдо рд╢реБрд▓реНрдХ рд▓реЗрддреЗ рд╣реИрдВ:
time nice ./thisfile.py ~/Torrent/....ec > out.txt 2>err.txt
рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
* рд▓реАрдб рд╕рдордп - 74'15..45 "(рдЙрд╕реА рд╕рдордп рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕рдВрдЧреАрдд рд╕реБрди рд░рд╣рд╛ рдерд╛, рдПрд╕реЗрдиреЛ);
* рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЧрддрд┐ ~ 40 рдПрдордмреА / рдПрд╕ (рдпрд╛ 58 рдЪрдХреНрд░ / рдмрд╛рдЗрдЯ) рд╣реИ
* 2584 рдлрд╛рдЗрд▓реЗрдВ рдЧрд┐рд░рд╛ рджреА рдЧрдИрдВ * .fb2 (рдПрдХреНрд╕рдкреИрдЯ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЧреИрд░ рдорд╛рдиреНрдп рдкрд╛рд░реНрд╕рд░ - рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕реАрдорд╛ рддрдХ рдирд╣реАрдВ ...) - ~ 10%;
* results.txt рдлрд╝рд╛рдЗрд▓ рдореЗрдВ - рдХреНрдпреЛрдВ рдирд╣реАрдВ ...
* рдареАрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: 65 рдЯреИрдЧ FB2 _not_ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдЙрдЯрдкреБрдЯ-рджрд╕реНрддрд╛рд╡реЗрдЬрд╝-рд╡рд░реНрдЧ); рдХреБрдЫ рдФрд░ (рдЖрдЙрдЯрдкреБрдЯ, рднрд╛рдЧ, рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ) рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдмрд╛рдХреА 10 рд╣рдЬрд╛рд░ рдмрд╛рд░ рд╕реЗ рд▓рдЧрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
* рдореЛрдЯреЗ рдЕрдиреБрдорд╛рди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдирд╛ (рдЕрдирдкреИрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде) 52%, рдкрд╛рд░реНрд╕рд┐рдВрдЧ - 40%, рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ_рд▓реЗрд╕рдореЗрдВрдЯ - 8% рд▓реЗрддрд╛ рд╣реИред
рдФрд░ рддреЗрдЬ - рдХреНрдпрд╛ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЕрдЬрдЧрд░ рдкрд░ред