Kein "==" bei nur einer Fuge, Anti-ochia.
[wortliste.git] / skripte / umformatierung.py
blobbb4500bdb82c83bfeefe4edc8704056bf0b73d01
1 #!/usr/bin/env python
2 # -*- coding: utf8 -*-
3 # :Copyright: © 2016 Günter Milde.
4 # Released without warranty under the terms of the
5 # GNU General Public License (v. 2 or later)
7 # umformatierung.py: Wandlung zwischen Lang- und Kurzformat der Wortliste(n)
8 # ==========================================================================
9 # ::
11 u"""
12 Wandlung zwischen Lang- und Kurzformat der Wortliste(n)
14 Die Eingabedateien werden in eine Liste gelesen, gewandelt, sortiert
15 und in die Standardausgabe, eine oder mehrere Dateien geschrieben.
17 Das spezielle Argument '-' steht für die Standardeingabe::
19 umformatierung.py -k - < wortliste > wlst
21 umformatierung.py neu.todo wlst-* > wortliste
23 Mit der Option ``--split`` kann die Aufteilung in Einzeldateien erzwungen
24 werden. Beispiel::
26 umformatierung.py -k langeintraege --split -o kurz_
28 erzeugt die Dateien ``kurz_a`` bis ``kurz_z``.
29 """
31 # Abhängigkeiten::
33 import argparse, sys, os, codecs, re
35 # path for local Python modules
36 sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'python'))
38 from edit_tools.wortliste import (filelines, WordEntry, ShortEntry,
39 long2short, short2long, sortkey_duden)
40 from edit_tools.split_wortliste import split_a_z, write_a_z
43 # Default-Aktion
44 # ==============
46 # ::
48 if __name__ == '__main__':
51 # sys.stdout mit UTF8 encoding::
53 sys.stdout = codecs.getwriter('UTF-8')(sys.stdout)
54 # sys.stderr = codecs.getwriter('UTF-8')(sys.stderr)
56 # Optionen::
58 usage = u'%(prog)s [Optionen] Eingabedatei(en) > aus \n' + __doc__
60 # parser = argparse.ArgumentParser(usage=usage)
61 parser = argparse.ArgumentParser(description=__doc__,
62 formatter_class=argparse.RawDescriptionHelpFormatter)
63 parser.add_argument('INFILES', nargs='+',
64 help=u'Eingabedatei(en), - für Standardeingabe')
65 parser.add_argument('-k', '--long2short',
66 help=u'vom Langformat in das Kurzformat wandeln.',
67 action="store_true", default=False)
68 parser.add_argument('-o', '--outfile',
69 help=u'Ausgangsdatei, Vorgabe: - (Standardausgabe)',
70 default='-')
71 parser.add_argument('-s', '--split',
72 help=u'Aufteilen in Dateien "OUTFILEa" bis "OUTFILEz".'
73 u'Vorgabe: False (nicht splitten)',
74 action="store_true", default=False)
75 parser.add_argument('-e', '--explicit', action='store_true', default=False,
76 help=u'Einträge nicht zusammenfassen.')
77 parser.add_argument('-u', '--unsorted', action='store_true', default=False,
78 help=u'Überspringe die Sortierung.')
80 args = parser.parse_args()
82 # Iterator über Eingabezeilen::
84 lines = filelines(args.INFILES or '-')
86 # Wandeln::
88 if args.long2short is True:
89 entries = long2short(lines, prune=not(args.explicit))
90 else:
91 entries = short2long(lines, prune=not(args.explicit))
93 # Sortieren und Ausgeben::
95 lines = (unicode(entry)+u'\n' for entry in entries)
97 if args.split is True:
98 lists = split_a_z(lines)
99 if args.unsorted is not True:
100 for l in lists.values():
101 l.sort(key=sortkey_duden)
102 write_a_z(lists, args.outfile)
103 else:
104 if args.unsorted is not True:
105 entries.sort(key=sortkey_duden)
107 if args.outfile == '-': # default
108 outfile = sys.stdout
109 else:
110 outfile = codecs.open(args.outfile, 'w', encoding='utf-8')
112 outfile.writelines(lines)