Korrekturen nach Durchsicht der Präfixliste, Neueinträge A...B.
[wortliste.git] / skripte / umformatierung.py
blobf72c6a3c11523305706114557c25a3009a78d3b0
1 #!/usr/bin/env python3
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, 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 # Optionen::
53 parser = argparse.ArgumentParser(description=__doc__,
54 formatter_class=argparse.RawDescriptionHelpFormatter)
55 parser.add_argument('INFILES', nargs='*', default=['-'],
56 help=u'Eingabedatei(en), Default: "-" (Standardeingabe)')
57 parser.add_argument('-k', '--long2short',
58 help=u'vom Langformat in das Kurzformat wandeln.',
59 action="store_true", default=False)
60 parser.add_argument('-o', '--outfile',
61 help=u'Ausgangsdatei, Vorgabe: - (Standardausgabe)',
62 default='-')
63 parser.add_argument('-s', '--split',
64 help=u'Aufteilen in Dateien "OUTFILEa" bis "OUTFILEz".'
65 u'Vorgabe: False (nicht splitten)',
66 action="store_true", default=False)
67 parser.add_argument('-e', '--explicit', action='store_true', default=False,
68 help=u'Einträge nicht zusammenfassen.')
69 parser.add_argument('-u', '--unsorted', action='store_true', default=False,
70 help=u'Überspringe die Sortierung.')
72 args = parser.parse_args()
74 # Iterator über Eingabezeilen::
76 lines = filelines(args.INFILES)
78 # Wandeln::
80 if args.long2short is True:
81 entries = long2short(lines, prune=not(args.explicit))
82 else:
83 entries = short2long(lines, prune=not(args.explicit))
85 # Sortieren und Ausgeben::
87 lines = (str(entry)+'\n' for entry in entries)
89 if args.split is True:
90 lists = split_a_z(lines)
91 if args.unsorted is not True:
92 for l in lists.values():
93 l.sort(key=sortkey_duden)
94 write_a_z(lists, args.outfile)
95 else:
96 if args.unsorted is not True:
97 entries.sort(key=sortkey_duden)
99 if args.outfile == '-': # default
100 outfile = sys.stdout
101 else:
102 outfile = open(args.outfile, 'w', encoding='utf-8')
104 outfile.writelines(lines)