2017-07-13 3 views
-2

J'ai cette liste:Python: Y a-t-il un moyen plus simple de faire cela? Chaîne à certains textes

comment = ['Item Location: AUMEL222\nLintu Testi: C:\\SSD\\important\\text.txt\nLintu Connection: 123\nItem Version: ABC.123.ABC\nItem Serial: 1234ABCD\nItem Configuration ID: ABCD1234'] 

i besoin d'extraire certains éléments d'ici. Et je l'ai fait fonctionner, mais il doit y avoir une façon plus simple de le faire. Mon code ressemble à ceci:

key = "Item Location" 
key_found = False 
for line in comment: 
    if key_found: 
     get_value(line)  #converts the big list to more readable state. 
line2 = line 
teststat = "" 
FW = "" 
print(line2) 
for item in line2.split("\n"): 
     if "Item Location" in item: 
       Teststat = (item.strip()) 
     if "Item Version" in item: 
       FW = (item.strip()) 
print(Teststat) 
print(FW) 

sorties:

Item Location : AUMEL222 
Item Version : ABC.123.ABC 

donc saisir quelques valeurs voulaient partir d'une chaîne. L'objectif principal est d'imprimer uniquement la valeur. Pas la clé. Mais il peut être fait avec:

print(Teststat.replace("Item Location: ", "")) 
+0

Je ne comprends pas il. S'il vous plaît dites-moi quelle est l'entrée et que voulez-vous en sortie. – Rahul

+0

entrée est la liste "commentaire" et la sortie désirée est la même sortie, mais avec un code plus simple. –

Répondre

0

Vous pourriez vouloir quelque chose comme ceci;

comment = ['Item Location: AUMEL222\n' 
      'Lintu Testi: C:\\SSD\\important\\text.txt\n' 
      'Lintu Connection: 123\n' 
      'Item Version: ABC.123.ABC\n' 
      'Item Serial: 1234ABCD\n' 
      'Item Configuration ID: ABCD1234'] 
comment = comment[0] 

for key_value_pair in [key_value_pair.split(':') 
         for key_value_pair in comment.split('\n')]: 
    print(':\t'.join(key_value_pair)) 

Notez que je simplement mettre des pièces de votre chaîne dans la liste sur de nouvelles lignes pour une meilleure lisibilité, cela n'a pas apporté aucune modification à la valeur de comment.


Sorties:

Item Location: AUMEL222 
Lintu Testi:  C: \SSD\important\text.txt 
Lintu Connection: 123 
Item Version: ABC.123.ABC 
Item Serial:  1234ABCD 
Item Configuration ID: ABCD1234 
+0

avec: impression (key_value_pair [1]) exactement ce que je cherchais. merci –

1

Essayez d'utiliser item.split(':')[1] au lieu de item.strip().

+0

ne le rend pas vraiment plus court ou plus simple –

+0

@EemilAhonen mais c'est le seul moyen de le faire – Rahul

+0

Si vous voulez le rendre plus court, vous pouvez essayer les expressions régulières avec le paquet 're' mais je pense que c'est un peu plus difficile façon. –

3

Les expressions régulières sont souvent surpuissant mais ils sont un bon match (jeu de mots boiteux, désolé) ici:

import re 
for line in comments: 
    found = re.findall(r"(^Item Location|Item Version): (.+?)$", line, re.MULTILINE) 
    if found: 
     print(found) 
     # if you only want the values: 
     print("\n".join(v for k, v in found)) 
     # if you want it as a dict for future use 
     found = dict(found) 
     print(found) 
     # etc 
+0

Fonctionne, merci. Vraiment Lame Pun. Mais aller avec la réponse de Tom –

0
comment = ['Item Location: AUMEL222\nLintu Testi: C:\\SSD\\important\\text.txt\nLintu Connection: 123\nItem Version: ABC.123.ABC\nItem Serial: 1234ABCD\nItem Configuration ID: ABCD1234'] 
key = 'Item Location' 

#split with \n 
commentSplit = comment[0].split('\n') 
commentSplit2 = [] 

#split with ':' 
for i in commentSplit: 
    commentSplit2.append(i.split(':')) 

#value for key 
for i in commentSplit2: 
if i[0] == key: 
    print i[1]