Demande #552 » synthese.py
1 |
import re, csv |
---|---|
2 |
|
3 |
dir_list = ['april.org/accessibilite', 'april.org/admins', 'april.org/admins-auto', 'april.org/ag2008', 'april.org/ag2009', 'april.org/ag2010', 'april.org/all-april', 'april.org/amellie', 'april.org/animation', 'april.org/april', 'april.org/april-actu', 'april.org/atelier', 'april.org/atf', 'april.org/bureau', 'april.org/ca', 'april.org/ca-interne', 'april.org/calendrier', 'april.org/campagne-adhesion', 'april.org/candidatsbe', 'april.org/candidatsbe-pacte', 'april.org/candidatsfr-actu', 'april.org/candidatsfr-locaux', 'april.org/comite-sgl', 'april.org/comm-externe', 'april.org/communique', 'april.org/comptabilite', 'april.org/contact', 'april.org/copinedegeek', 'april.org/copyleft_attitude', 'april.org/cstic', 'april.org/debats', 'april.org/diversite', 'april.org/educ', 'april.org/entreprises', 'april.org/fdi', 'april.org/freesw-eu', 'april.org/gdtc-devel', 'april.org/gte', 'april.org/informatique-deloyale', 'april.org/intervenants-sgl', 'april.org/juridique', 'april.org/libreassociation', 'april.org/liste-infos', 'april.org/liste-infos-moderateurs', 'april.org/mdl', 'april.org/orga', 'april.org/owf-ged', 'april.org/patrimoine-mondial', 'april.org/persmorales', 'april.org/prez', 'april.org/resp-tous', 'april.org/rp', 'april.org/rtfm', 'april.org/secretaire', 'april.org/sensibilisation', 'april.org/sgl', 'april.org/sir', 'april.org/siteweb', 'april.org/synceduc', 'april.org/syncrgi', 'april.org/technique', 'april.org/template', 'april.org/terminologie', 'april.org/trad-gnu', 'april.org/trad-gpl', 'april.org/traductions', 'april.org/transcriptions', 'april.org/tresorier', 'april.org/turing', 'april.org/webmasters', 'april.org/webmasters-auto', 'candidats.fr/candidatsfr', 'candidats.fr/signature-organisation', 'informatiquedeloyale.info/contact', 'libre-en-fete.net/contact-lef', 'libre-en-fete.net/lef'] |
4 |
|
5 |
keyword_list = r'(status|visibility|review|subscribe|add|send|digest|rfc2369_header_fields)' |
6 |
|
7 |
keyword_detect_multilines = r'(available_user_options|web_archive|reply_to_header)' |
8 |
|
9 |
keyword_list_multilines = r'(apply|value|other_email|reception|access)' |
10 |
|
11 |
# Parsing
|
12 |
|
13 |
global configurations, keywords |
14 |
|
15 |
configurations = {} |
16 |
keywords = ['mailling_list'] |
17 |
|
18 |
def store(directory, line, master_key = ''): |
19 |
if master_key == '': |
20 |
key = line.split()[0] |
21 |
else: |
22 |
key = master_key + ':' + line.split()[0] |
23 |
if key not in keywords: keywords.append(key) |
24 |
content = line.split()[1:] |
25 |
configurations[directory][key] = content[0] |
26 |
|
27 |
for directory in dir_list: |
28 |
|
29 |
configurations[directory] = {'mailling_list':directory} |
30 |
|
31 |
config = open(directory + '/config', 'r') |
32 |
|
33 |
old_line = '\n' |
34 |
line = '\n' |
35 |
|
36 |
while line != '': |
37 |
line = config.readline() |
38 |
|
39 |
if re.match(keyword_list, line) and old_line == '\n': |
40 |
store(directory,line) |
41 |
|
42 |
if re.match(keyword_detect_multilines, line) and old_line == '\n': |
43 |
master = line.split()[0] |
44 |
while line != '\n': |
45 |
line = config.readline() |
46 |
if re.match(keyword_list_multilines, line): |
47 |
store(directory, line, master_key = master) |
48 |
|
49 |
old_line = line |
50 |
|
51 |
config.close() |
52 |
|
53 |
# print configurations, keywords
|
54 |
|
55 |
# CSV export
|
56 |
|
57 |
############## DictWriter.writeheader() indisponible pour python < 2.7
|
58 |
|
59 |
out = open('config.csv', 'wb') |
60 |
for key in keywords: |
61 |
out.write(key + ',') |
62 |
out.write('\n') |
63 |
out.close() |
64 |
|
65 |
##############
|
66 |
|
67 |
out = open('config.csv', 'a') |
68 |
|
69 |
data = csv.DictWriter(out,keywords) |
70 |
|
71 |
for mailling_list in configurations: |
72 |
data.writerow(configurations[mailling_list]) |