-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdata_to_csv.py
147 lines (109 loc) · 5.37 KB
/
data_to_csv.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# Transformation des data du sondage flux de JSON vers CSV
# Python 3.5.3
# Debian 9.5 @ kirin / 20220428 / pierre@lesporteslogiques.net
# aide précieuse pour réaliser ce script : https://stackoverflow.com/a/55872801
# Les réponses du sondage sont enregistrées dans le fichier JSON uniquement
# si la question a été répondu, sinon le libellé du champ n'apparaît pas
# ça complique le passage en csv, pour y remédier on initialise d'abord tous
# les champs à une valeur vide puis on remplit avec les valeurs répondues
# Il y avait une erreur dans les libellés du sondage :
# "benevolat" à la place d'age jusqu'à data_1651149254000_350.json
# étant donné que le libellé benevolat est utilisé avant, les réponses à
# la première question sont écrasées...
# le script s'adapte pour la corriger, mais les données sont perdues
import os # https://docs.python.org/3/library/os.html
import datetime # https://docs.python.org/3/library/datetime.html
import json # https://docs.python.org/3/library/json.html
import csv # https://docs.python.org/3/library/csv.html
import re # https://docs.python.org/3/library/re.html
DEBUG = False
# répertoire contenant les données --------------------------------------------
start = "/home/emoc/Bureau/FLUX/FLUX-WEB/flux.bzh/www/sondage_data_to_csv/data/"
# fichier csv -----------------------------------------------------------------
csvfile = "résultats_sondage_flux.csv"
# -----------------------------------------------------------------------------
# prendre le fichier json des questions et extraire les intitulés des champs
champ_cle = []
with open('sondage.js') as f:
datafile = f.readlines()
for line in datafile:
if "\"name\"" in line:
cle = re.sub(',|\"', '', line.strip()[8:]) # regex
if cle not in champ_cle:
champ_cle.append(cle)
# compléter par les champs additionnels
champ_cle.append('time_spent_on_survey')
champ_cle.append('unique_file_id')
champ_cle.append('autre-region-Comment')
champ_cle.append('situation-lieu-activite-Comment')
champ_cle.append('metier-anterieur-Comment')
champ_cle.append('fablab-Comment')
champ_cle.append('pratique-sportive-raison-absence-Comment')
champ_cle.append('motif-installation-Comment')
champ_cle.append('autre-chose')
champ_cle.append('lieu-activite-Comment')
champ_cle.append('activite-autre-Comment')
champ_cle.append('ordinateur-absence-Comment')
champ_cle.append('situation-actuelle-Comment')
champ_cle.append('participation-creation-Comment')
champ_cle.append('ville-Comment')
champ_cle.append('quimper-quartier-Comment')
champ_cle.append('pratique-artistique-raison-absence-Comment')
champ_cle.append('autre-lieu-activite-non-Comment')
champ_cle.append('zone-de-vie-Comment')
champ_cle.append('smartphone-usage-Comment')
champ_cle.append('smartphone-absence-Comment')
champ_cle.append('ordinateur-usage-Comment')
champ_cle.append('age')
champ_cle.insert(0, "date-heure")
if DEBUG:
print(champ_cle)
# -----------------------------------------------------------------------------
# créer le fichier CSV, il sera alimenté par un dictionnaire
csv_resultats = open(csvfile,'w')
csvwriter = csv.DictWriter(csv_resultats, fieldnames=champ_cle)
csvwriter.writeheader()
# -----------------------------------------------------------------------------
# traiter chaque fichier de données
for dirpath, dirs, files in os.walk(start):
files.sort() # trier les répertoires par ordre alphabétique
for filename in files:
# ---------------------------------------------------------------------
# initialiser les resultats à zéro
resultats = {} # dictionnaire des résultats
for cle in champ_cle:
resultats[cle] = '';
fname = os.path.join(dirpath,filename) # nom complet
# ---------------------------------------------------------------------
# extraire la date et l'heure
ftime = os.path.getmtime(fname)
fdate = datetime.datetime.fromtimestamp(ftime)
fjour = str(fdate.day)
fmois = str(fdate.month)
fannee = str(fdate.year)
fheure = str(fdate.hour)
fminute = str(fdate.minute)
fseconde = str(fdate.second)
if DEBUG:
print("")
print(filename," date : ",fjour,"/",fmois,"/",fannee," ",fheure,":",fminute,":",fseconde)
print("")
dateheure = fjour+"/"+fmois+"/"+fannee+" "+fheure+":"+fminute+":"+fseconde
resultats["date-heure"] = dateheure;
# ---------------------------------------------------------------------
# charger le contenu du fichier JSON de données
with open(fname) as file:
data = json.load(file) # charger le json dans un dict
for k, v in data.items(): # lire clé et valeur de chaque entrée
# pour corriger l'erreur dans les noms de champ du sondage ...
if ftime <= 1651149254000 and k == "benevolat":
resultats["age"] = v
else :
resultats[k] = v
csvwriter.writerow(resultats)
if DEBUG:
print(resultats)
# -----------------------------------------------------------------------------
# fermer le fichier CSV
csv_resultats.close()
# The End