• [Debutant] Cas d'école mais je ne m'en sorts pas...
Réponses:
13
Visites:
0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum.
Inscrivez-vous maintenant
• [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
ph_biohazard
le
21/05/2008 23:33
Bonjour a tous,
Je ne suis pas un gourou de python, et non plus un king des ordinogrammes/organigrammes, et la je seche Voila ma problematique : J'ai un fichier en ascii delimite A (ma référence). Un soft m'envoie regulierement chaque semaine un fichier en ascii delimité que nous nommerons fichier B, qui a la meme structure que le fichier A, sauf que certains contenus des lignes peuvent changées voire même decallées dans le même champ mais plus bas dans le tableau si on le convertie dans un tableau xls. Je souhaite faire script qui me cree un fichier comparatif C, qui prendrait chacune des valeurs de A et de B et me ressortirait (donc dans C) uniquement toutes les nouveautes contenu dans le fichier B par rapport au fichier A. 1. Est-ce possible ? 2. Je suis preneur de toute proposition de script qui pourrait me mettre sur la voie Je vous remercie tous pour votre aide precieuse PS. moi et les traitements de donnees dans les fichiers, ce n'est pas mon copain )))) mais je persiste !! Tres Cordialement Marc |
• Re: [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
jice
le
22/05/2008 14:11
Bonjour,
Pourquoi ne pas utiliser un programme de diff quelconque comme csdiff (pour windows - pour linux il y a diff tout court) http://www.componentsoftware.com/products/CSDiff/index.htm Sinon, s'il est nécessaire d'écrire un script pour ça, c'est que j'ai mal compris le texte et un petit éclaircissement du paragraphe "un...xls" serait le bienvenu. Que veut dire "décalées dans le même champ mais plus bas dans le tableau si on le convertit dans un tableau xls" |
• Re: [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
jice
le
22/05/2008 15:50
Et puis, quelles différences veux-tu voir listées ?
Serait-il possible de mettre un petit bout de fichier pour illustrer la structure ? |
• Re: [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
ph_biohazard
le
30/05/2008 14:35
Bonjour Jice,
Merci pour ton aide, desole pour le delais, j'ai eu une coupure du net suite a un orage. Bref, tout fonctionne maintenant. Voici ci-dessous, les 2 fichiers exemples CSV. FichierA.CSV est le fichier du mois anterieur, le fichierB.csv est le fichier fin de mois en cours. L'idee est de ne prendre que les nouvelles entrees et faire ressortir dans un print quelconque que les 2 derniers champs de chaque ligne des nouvelles entrees. Voila voila mon pb ! Je te remercie encore pour ton aide Tres Cordialement FichierA.CSV : code:
FichierB.CSV code:
|
• Re: [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
glickind
le
02/06/2008 01:51
euh, c'est bizarre, dans ton exemple, A.CSV et B.CSV n'ont aucune ligne en commun
donc tout le fichier B.CSV est nouveau qq remarques, il y a bien des lignes qui se ressemblent: dans A.CSV: Activé,VVA-XP,Très basse,Agent,OK,Poste Vva en dmz,Vva dans B.CSV: Activé,VVA-XP,Très basse,Agent,OK,Poste Vova en dmz,Vva il y a un 'o' en plus A.CSV: Activé,XPSP2,Très basse,Agent,OK, trial version jusqu'au 29 mai 2008,JL B.CSV: Activé,,Très basse,Agent,OK,, sont identiques si on ne tient pas compte des colonnes 2, 6 et 7. Peux-tu préciser les règles pour comparer 2 lignes: egalité stricte, à 1 lettre près, sans tenir compte de certaines colonnes ... ? Par ailleurs A.CSV contient 2 formats de date "14 mai 2008" et "5/7/2008" B.CSV contient 2 fois l'utilisateur en fin de ligne "user1-test,user1-test" ------------------- Voila ce que je te propose: J'ai viré le "o" de B.csv pour avoir une ligne commune avec A.csv: Activé,VVA-XP,Très basse,Agent,OK,Poste Vva en dmz,Vva sous une ligne de commande Unix, voici mon code code: comm -1 -3 A.csv B.csv | awk -F, '{print $(NF-1) "," $NF}'
et j'obtiens: code: trial version jusqu'au 29 mai 2008,JL
Si t'es encore sous Windows, tu peux installer Linux Si tu persistes sous Windows, va voir sur http://unxutils.sourceforge.net/ ou sur http://gnuwin32.sourceforge.net/ comm est dans le package CoreUtils tu peux utiliser gawk a la place de awk désolé y a pas de python dans cette solution |
• Re: [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
jice
le
02/06/2008 10:46
Une solution python n'est pas très compliquée à mettre en oeuvre...
Je la poste dès que j'ai un peu de temps... |
• Re: [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
ph_biohazard
le
02/06/2008 11:39
Bonjour,
Desole, je te refais un copier/coller des 2 fichiers. Sauf que le fichierB, j'ai fait une reexportation aujourd'hui du soft de ma boite en ajoutant des utilisateurs. Pour repondre a ta question seuls les 2 derniers champs m'interessent car les autres champs peuvent changer, et ne m'interessent pas. L'avant-dernier champs est en fait un champ de description dans l'appli, donc la secretaire peut y mettre ce qu'elle veut. Effectivement, il y a une ligne ou 2 champs sont vides, je ne comprends pas, peut etre il y a eu une faute de frappe, qui est ressorti dans l'extraction...ce n'est pas tres important si on la fait ressortir dans l'affichage final. Par contre, la secretaire est sous windows, et je comptais lui faire un TKinter simple pour qu'elle fasse l'extraction facilement avec python compile. Revoici le fichierA.CVS code:
Voici le fichierB.csv que j'ai genere ce matin : code:
Merci pour votre aide |
• Re: [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
jice
le
02/06/2008 14:07
Bon, voici un script qui devrait faire ce que tu veux (à adapter si besoin).
Je n'ai pas pu le tester car je n'ai pas le temps, mais il ne devrait pas y avoir trop de problème. S'il y en a, n'hésite pas à te plaindre ici même Le principe est d'ouvrir le fichier A et de stocker les parties de lignes discriminantes comme clés d'un dictionnaire. Ensuite, on compare les mêmes parties de lignes du fichier B avec ces clés et on les écrit si elles sont en double... code: import string
|
• Re: [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
ph_biohazard
le
02/06/2008 18:46
Merci Jice,
J'ai essaye ton script, mais j'ai une erreur sur f2.close() J'ai corrige sur la ligne suivante le sLine[-1]] car il y avait un crochet de trop, mais j'ai tjrs une erreur sur le f2.close()... pourquoi a ton avis? Merci pour ton aide |
|
• Re: [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
jice
le
04/06/2008 08:38
En fait, c'est parce que, dans ce forum, il faut mettre des espaces après les "[" si on ne veut pas les voir interprété comme des tags. Du coup, mon "[sLine[" a disparu... Désolé...
code: f2.write(string.join([sLine[-2], sLine[-1]], ',')
@multani : merci pour tes remarques... |
• Re: [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
jice
le
04/06/2008 08:40
En fait, c'est parce que, dans ce forum, il faut mettre des espaces après les "[" si on ne veut pas les voir interprété comme des tags. Du coup, mon "[sLine[" a disparu... Désolé...
code: f2.write(string.join([sLine[-2], sLine[-1]], ',')
@multani : merci pour tes remarques... |
• Re: [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
ph_biohazard
le
12/06/2008 22:34
Bonjour a tous,
Je vous remercie pour vos aides et commentaires, cependant avec ou sans ]]" ou sans, j'ai le meme probleme. J'ai bien compris que le mieux etait d'utiliser le split, et voici le code : code: import string
Si je laisse l'avant derniere ligne telle quelle, j'ai l'erreur de syntaxe sur le f2.close, par contre, si le commente, et je decommente la ligne f2.write de dessus, j'ai un bon debut sur le fichier de sortie, mais je n'arrive pas a extraire les deux ou trois dernieres cellules de fin de ligne. Comment puis-je m'en sortir? Merci pour vos recommendations |
• Re: [Debutant] Cas d'école mais je ne m'en sorts pas...
Posté par
jice
le
13/06/2008 14:15
Pas
code: f2.write(string.join([-2], sLine[-1]], ',')
mais code: f2.write(string.join([sLine[-2], sLine[-1]], ',')
Dans mon premier script,[sLine disparaissait parce qu'il était interprété comme un tag (pour éviter le problème, il faut mettre un espace après le[. |






