2011-05-06 2 views
3

J'ai deux fichiers dans ce formatcomparer deux fichiers

file1= filename val1 val2 
file2= filename val3 val4 

Je veux comparer les noms de fichiers et si elles ont les mêmes noms, je veux obtenir un troisième fichier comme this-

filename val1 val2 val3 val4 

Je choisis un nom de fichier de file1 et de traverser file2 pour voir si je l'obtiens. Puis, en recherchant le pointeur en haut du file2 pour le nom de fichier suivant, y a-t-il une façon plus efficace de le faire?

+2

Vous pouvez préciser votre question et montrer le code que vous utilisez. – zeekay

Répondre

2

créer un dict file2[filename] = (val3, val4). vous pouvez créer ceci une fois, puis la recherche d'un nom de fichier donné à partir de fichier1 prend du temps constant (ie est plus ou moins indépendant de la taille du fichier2)

4

join commande (pas Python, mais un utilitaire shell Unix standard). Voici un petit bout de la page de manuel sur un système (qui semble avoir plus de détails que Linux man page for join):

 join phonedir names 

     If the phonedir file contains the following names: 

     Adams A.  555-6235 
     Dickerson B. 555-1842 
     Erwin G.  555-1234 
     Jackson J.  555-0256 
     Lewis B.  555-3237 
     Norwood M.  555-5341 
     Smartt D.  555-1540 
     Wright M.  555-1234 
     Xandy G.  555-5015 

     and the names file contains these names and department numbers: 

     Erwin   Dept. 389 
     Frost   Dept. 217 
     Nicholson  Dept. 311 
     Norwood   Dept. 454 
     Wright   Dept. 520 
     Xandy   Dept. 999 

     the join command displays: 

     Erwin G.  555-1234  Dept. 389 
     Norwood M.  555-5341  Dept. 454 
     Wright M.  555-1234  Dept. 520 
     Xandy G.  555-5015  Dept. 999 
+0

merci! Malheureusement, je reçois une nouvelle ligne supplémentaire .. donc le résultat final que je reçois est le nom de fichier val1 val2 (sur la nouvelle ligne) val3 val4. Je veux que ce soit comme si vous l'aviez montré - sans le retour à la ligne après fichier1. J'utilise join file1 file2> outputfile – Illusionist

+0

@Illusionist: C'est * possible * qui est lié aux fins de ligne. Votre fichier est peut-être terminé CRLF (style DOS)? –

+0

oui il est terminé CLRF – Illusionist

Questions connexes