2017-07-27 5 views
1

Ok, donc je ne pouvais pas trouver un titre approprié donc je ne peux pas expliquer le mieux possible.Trouver toutes les chaînes spécifiques dans un fichier, et obtenir la valeur la plus élevée hors de la ligne

J'ai une liste faite à partir des données d'un autre fichier qui est fait de noms, prenons par exemple quelque chose comme celui-ci list = ['AAA','BBBB','CCCC','DDDD']. Je veux rechercher dans un autre fichier tous les éléments de cette liste, et toutes les lignes qui les contiennent. Disons que mon fichier txt ressemble à ceci.

PIN |Direction |MaxUp  |MaxDn  |MinUp  |MinDn  |Net                    
    AAA | IN  |0.46  |0.039  | -0.006 |0.009  | Top/AAA 
    AAA | IN  |-0.015 |-0.020 | 0.016 |0.030  | Top1/AAA 
    AAA | IN  |0.029  |0.019  | -0.006 |0.009  | Top2/AAA 
    AAA | IN  |0.036  |0.029  | -0.006 |0.009  | Top3/AAA 

Alors Mon code se présente comme suit:

for string in list: 
    with open('Text.txt') as file: 
     for lines in file: 
       if string in lines: 
        #Get all lines 
        #Get the line with the highest maxup and Maxdn 

La sortie du processus devrait afficher toutes les lignes qui ont la chaîne que nous examinons actuellement si:

il doit montrer tous les 4 lignes qui contiennent AAA dans ce cas, et il obtiendra alors seulement le plus haut MaxUp et MaxDn donc la sortie devrait être:

PIN |Direction |MaxUp  |MaxDn                    
    AAA | IN  |0.46  |0.039 

J'ai une idée générale de ce que je devrais faire mais le processus prend beaucoup de temps car Im ouvrir un fichier dans une boucle for me semble un peu faux.

+0

Oui, l'ouverture et la lecture de la même le fichier 'N' envoie mal. Échangez les boucles de sorte que, pour chaque ligne, vous vérifiez la liste des chaînes cibles. – Fhaab

+0

Cela vous intéresse-t-il seulement d'apparaître dans le code PIN? ou à travers toute la ligne? – mattjegan

Répondre

0

Nous devons d'abord nettoyer les données, cela signifie supprimer tous les caractères | ainsi que les espaces. Maintenant, nous aurons les données dans un format utilisable, une liste python. Cela signifie que nous pouvons comparer les valeurs de chaque colonne assez facilement. Nous commençons donc la recherche des lignes en faisant une boucle sur chaque chaîne dans la liste des termes de recherche, puis pour chaque ligne de données, nous vérifions si la chaîne est dans la ligne et si c'est le cas, nous vérifions voir si elle a battu tous les records, puis nous l'enregistrons. Note: J'ai changé le nom de la liste à li puisque la liste est une commande interne en python

li = ['AAA', 'BBBB', 'CCCC', 'DDDD'] 

lines = [] 
first = True 
with open('Text.txt') as file: 
    for line in file: 
     if first: 
      first = False 
      continue 
     lines.append([x.strip() for x in line.split('|')]) 

for string in li: 
    print('Lines containing', string, ':') 
    maxUp = None 
    maxDn = None 
    for line in lines: 
     if string in line: 
      if maxUp is None and maxDn is None: 
       maxUp = line 
       maxDn = line 
      print(line) 
      if line[2] >= maxUp[2]: 
       maxUp = line 
      if line[3] >= maxDn[2]: 
       maxDn = line 
    print() 
    print('maxUp:', maxUp) 
    print('maxDn:', maxDn) 
    print() 

Avec vos données, je reçois le résultat suivant:

Lines containing AAA : 
['AAA', 'IN', '0.46', '0.039', '-0.006', '0.009', 'Top/AAA'] 
['AAA', 'IN', '-0.015', '-0.020', '0.016', '0.030', 'Top1/AAA'] 
['AAA', 'IN', '0.029', '0.019', '-0.006', '0.009', 'Top2/AAA'] 
['AAA', 'IN', '0.036', '0.029', '-0.006', '0.009', 'Top3/AAA'] 

maxUp: ['AAA', 'IN', '0.46', '0.039', '-0.006', '0.009', 'Top/AAA'] 
maxDn: ['AAA', 'IN', '0.46', '0.039', '-0.006', '0.009', 'Top/AAA'] 

Lines containing BBBB : 

maxUp: None 
maxDn: None 

Lines containing CCCC : 

maxUp: None 
maxDn: None 

Lines containing DDDD : 

maxUp: None 
maxDn: None 
+0

J'ai essayé cela et pour une raison quelconque, il ne cherchera que la première chaîne de la liste. Les autres ne sont pas écrits dans mon fichier de sortie. Aussi comment pourrais-je continuer à obtenir la ligne avec les plus hauts Maxup et MaxDn? –

+0

Comment est-ce après l'édition – mattjegan