Comparaison de fichiers csv
Bonjour,
voilà je suis nouveau sur le site et j'ai une question car je reste bloqué et je deviens fou. >.<
Je vous explique, j'ai 2 fichiers en .csv qui parle de communes le premier est le vieux et le second le nouveau recensement.
Je voudrais qu'il puisse se comparer et créer un fichier numéro 3 ou dedans il y'aurait [les paramètres changés],[les paramètres supprimés] et [les paramètres ajoutés]
Voici mon code pour l'instant:
Code:
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
| from os import chdir ### importer le module chdir
chdir("Z:\SP\Python") ###changement de répertoire
import csv ## importer le module csv
fname1="p1_20140127.csv" ### nom du fichier no1
fname2="p2_20140127.csv" ### nom du fichier no2
file1 = open(fname1,"rt") ###ouvre le fichier fname1 en lecture de texte par défault
try:
reader = csv.reader(file1) ###lire le fichier 1
for row in reader:
print (row[2],row[5],row[6],row[12]) ###écrire la colonne 2-5-6 et 12 du fichier p1
finally:
file1.close() ###fermer le fichier 1
print("####################FICHIER 1 CLOSE####################")
file2 = open(fname2,"rt") ###ouvre le fichier fname2 en lecture texte par défault
try:
reader = csv.reader(file2) ### lire le fichier
for row in reader:
print (row[2],row[5],row[6],row[12]) ###écrire la colonne 2-5-6 et 12 du fichier p2
finally:
file2.close() ###fermer le fichier 2
print("####################FICHIER 2 CLOSE####################")
#####lecture des fichiers terminé##### |
EXEMPLE du fichier 1 et 2:
onrp,type,zip,"complement","city","cityfull","canton",language,divlang,issorted,distributedby,bfs,"date"
104,20,1000,"00","Lausanne","Lausanne","VD",2,NULL,0,130,5586,"1988-03-01"
onrp,type,zip,"complement","city","cityfull","canton",language,divlang,issorted,distributedby,bfs,"date"
104,20,1000,"00","Lausanne","Lausanne","VD",2,NULL,0,130,5586,"1988-03-01"
J'espère que vous pourrez m'aider, Merci beaucoup =)
Pensez à la balise [code]
Bonjour
C'est très bien de ta part d'expliquer la finalité que tu poursuis. Néanmoins, cela nous serait plus facile de t'aider si.
- Tu postais ton code dans entre les balises prévues à cette fin (le boton #)
- Tu décrivait plus précisément sur quoi tu bloque
Dans le code posté, tu parcours juste les fichiers en entrée et tu imprime une partie du contenu. Ton problème ne tient, à que qu'il me semble, pas à une question python mais à savoir comment procéder, l'algorithme.
Confronté à ce type de problème, je chargerais chaque fichier de telle sorte qu'il soit facile et performant de faire des recherche. En mémoire, par exemple, ou dans une base sqlite (gros fichiers). Pour ce tu auras certainement besoin de normaliser les données (e.g. la casse)
Un ultime conseil. Essaye des petits bouts de code dans idle, et ce à toutes les sauces. Tu avancera plus vite et mieux qu'en attendant que quelqu'un te ponde une solution toute faite.
Python re l'aventure continue
Re Voilà j'ai réussi à pondre un code.
Mais je ne comprends pas quand je le lance il me met invalid syntax et me souligne le print à la 56ême lignes.
Quelqu'un pour m'aider =)
Code:
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
| from os import chdir ### importer le module chdir
chdir("Z:\SP\Python") ###changement de répertoire
import csv ### importer le module csv
fname1="p1_20140127.csv" ### nom du fichier no1
fname2="p2_20140127.csv" ### nom du fichier no2
### listes qui contiennent les infos essentiels
zipVieux = list()
zipNouveaux = list()
communeVieux = list()
communeNouveaux = list()
### listes qui contiennent les modifications
inchange = list()
supprime = list()
renomme = list()
file1 = open(fname1,"rt") ###ouvre le fichier fname1 en lecture de texte par défault
try:
reader = csv.reader(file1) ###lire le fichier 1
for row in reader: ### pour la colonne dans le fichier
zipVieux.append(row[2])
communeVieux.append(row[5])
finally:
file1.close() ###fermer le fichier 1
print("Fichier 1 fermé et bien lu")
print("nombre de vieux code postaux : ", len(zipVieux)) ###longeur de l'ancien zip
print("nombre de vieux nom de communes : ", len (communeVieux))### Vérifié s'ils font la meme taille
file2 = open(fname2,"rt") ###ouvre le fichier fname2 en lecture texte par défault
try:
reader = csv.reader(file2) ### lire le fichier
for row in reader:
zipNouveux.append(row[2])
communeNouveaux.append(row[5])
finally:
file2.close() ###fermer le fichier 2
print("Fichier 2 fermé et bien lu")
print("nombre de nouveaux code postaux : ", len(zipNouveaux))
print("nombre de nouveaux nom de communes : ", len(communeNouveaux))
#####lecture des fichiers terminé#####
try:
for i, elt in enumerate(zipVieux) :
try:
indexNouveau = zipNouveaux.index(elt)
if communeVieux[i] == communeNouveaux[indexNouveau]:
inchange.append([elt,communeNouveaux[indexNouveau]])
else:
ronomme.append([zipNouveaux[indexNouveau],communeNouveaux[indexNouveau]])
except:
supprime.append([elt,communeVieux[i]]) ###ajouter que la commune a été supprimées
print("Nombre de communes inchangées : ", len(inchange))
print("Nombre de communes renommées : ", len(renomme))
print("Nombre de communes supprimées : ", len(supprime))
print("Nombre de nouvelle communes : ", len(communeNouveaux))
print("Communes ronnomées : ", renomme, "Communes supprimées : ", supprime, "Communes nouvelles : ", communeNouveaux) |
Merci.