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 # ==========================================================================
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
26 umformatierung.py -k langeintraege --split -o kurz_
28 erzeugt die Dateien ``kurz_a`` bis ``kurz_z``.
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
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)
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)',
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 '-')
88 if args
.long2short
is True:
89 entries
= long2short(lines
, prune
=not(args
.explicit
))
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
)
104 if args
.unsorted
is not True:
105 entries
.sort(key
=sortkey_duden
)
107 if args
.outfile
== '-': # default
110 outfile
= codecs
.open(args
.outfile
, 'w', encoding
='utf-8')
112 outfile
.writelines(lines
)