2017-08-17 7 views
1

En utilisant Python, j'ai deux gros fichiers (même longueur) dont les numéros sont divisés par des espaces:Calcul du quotient entre deux fichiers et écrire dans un autre fichier

0.11158E-13 0.11195E-13 0.11233E -13 ... # fichier1

0.11010E-13 0.11070E-13 0.11117E-13 ... # fichier2

Il existe des différences dans les valeurs et je voudrais obtenir les différences relatives et de les écrire dans le même format dans un troisième fichier. Je peux le faire pour la première valeur mais j'ai un problème quand il s'agit de ITERATING le processus (de sorte que toutes les valeurs sont calculées).

Voici le code (je suis nouveau dans le code python):

with open('ex1.idl', 'r') as f1:  #this opens the first file 
    with open('ex2.idl', 'r') as f2:  #this opens the second file 

     f1 = f1.read(13)   # reading the length of the value (ex1.idl) 
     f2 = f2.read(13)   # reading the length of the value (ex2.idl) 
     f1 = float(f1)   #assigning the numerical value for the string 
     f2 = float(f2)   #assigning the numerical value for the string 
     c = f1/f2    #calculating relative values  

with open('ex3.txt', 'w') as f3:   #opening the new file and 
    f3.write(str(c))      #writing into the new file as a string 

Est-ce la voie à suivre ou devrais-je aller avec une approche différente? Une réponse est très appréciée.

Répondre

0

Il semble que vos fichiers aient chacun une ligne. Le moyen le plus simple d'obtenir les nombres dans chaque fichier est de simplement lire tout le contenu du fichier, de supprimer les caractères inutiles, puis de les diviser sur l'espace séparant les valeurs à virgule flottante. La division sur l'espace vous donnera une liste de strings, que vous pouvez ensuite contraindre à floats. À ce stade, vous devez disposer de deux listes de valeurs à virgule flottante, c'est-à-dire lorsque vous utilisez la combinaison des fonctions zip et map pour effectuer l'opération de division. Ce qui suit est une illustration:

with open('ex1.idl') as f1, open('ex2.idl') as f2: 
    with open('ex3.txt', 'w') as f3: 
     f1 = map(float, f1.read().strip().split()) 
     f2 = map(float, f2.read().strip().split()) 
     for result in map(lambda v: v[0]/v[1], zip(f1, f2)): 
      # This writes the results all in one line 
      # If you wanted to write them in multiple lines, 
      # then you would need replace the space character 
      # with a newline character. 
      f3.write(str(result)+" ") 

J'espère que cela se révèle utile.

+0

Merci, ça a aidé. J'ai une autre question: En l'occurrence les données requises sont situées profondément dans le fichier dans une certaine ligne. J'espérais ce serait faire l'affaire: \t \t f1 = f1.readlines() [905]/n \t \t f2 = f2.readlines() [905]/n \t \t J'inséré ce dernier après la commande ouverte (f3 :) Ces 2 lignes devraient fonctionner mais il semblerait qu'elles ne soient pas compatibles avec le reste. – Robert

+0

Salut @Robert Je ne suis pas sûr de suivre. Pouvez-vous éditer votre question et ajouter ces modifications? Sinon, vous pouvez poser une nouvelle question avec ces clarifications à l'esprit. – Abdou

+0

Will do :) Pensé que ce ne serait pas si clair. – Robert