2017-03-05 2 views
0

Im Wesentlichen, was ich die Zeilen des Dokuments schreiben möchten, die die IDs-Liste im Code verwiesen.Schreibe Zeile, die Zeichen in einer anderen Datei entspricht

nodeIDs.txt:

... hat 417 Objekte,

10000 
10023 
1017 
1019 
1021 
1026 
1027 
1029 
... 

Adherens junction.txt:

... hat 73 Zeilen,

4301: AFDN; afadin, adherens junction formation factor 
1496: CTNNA2; catenin alpha 2 
283106: CSNK2A3; casein kinase 2 alpha 3 
2241: FER; FER tyrosine kinase 
60: ACTB; actin beta 
1956: EGFR; epidermal growth factor receptor 
56288: PARD3; par-3 family cell polarity regulator 
10458: BAIAP2; BAI1 associated protein 2 
51176: LEF1; lymphoid enhancer binding factor 1 

Ich versuche, das Programm Zeile für Zeile zu gehen und auf die IDs-Liste zu verweisen und ob die Anfangzeichen der Zeile mit denen übereinstimmen, die in der Liste gefunden wurden, um diese Zeile in ein neues Dokument zu schreiben. Ich recherchierte Datensätze, aber ich war mir nicht sicher, ob diese hier funktionieren würden.

Mein Code so weit:

ids = [] 
with open('nodeIDs.txt', 'r') as n: 
    for line in n: 
     ids.append(line) 
n.close() 

# Import data from the pathway file and turn into a list 
g = [] 
with open('Adherens junction.txt', 'r') as a: 
    for line in a: 
     g.append(line) 
a.close() 

aj = open('Adherens.txt', 'a') 
for line in a: 
    if ids[i] in line: 
    aj.write(line) 
aj.close() 

Können Sie mir helfen, diese Arbeit zu bekommen?

+0

Diese Frage würde stark mit einem verbessert werden [Minimal, vollständig und prüfbare] (http://stackoverflow.com/ help/mcve) Beispiel. Insbesondere Daten, die funktionieren und nicht nur das Format und die erwartete Ausgabe der gelieferten Daten darstellen. –

Antwort

2

Hier ist ein Code, den ich denke, was du willst.

Code:

# read ids file into a set 
with open('file1', 'r') as f: 
    # create a set comprehension 
    ids = {line.strip() for line in f} 

# read the pathway file and turn into a list 
with open('file2', 'r') as f: 
    # create a list comprehension 
    pathways = [line for line in f] 

# output matching lines 
with open('file3', 'a') as f: 

    # loop through each of the pathways 
    for pathway in pathways: 

     # get the number in front of the ':' 
     start_of_line = pathway.split(':', 1)[0] 

     # if this is in 'ids' output the line 
     if start_of_line.strip() in ids: 
      f.write(pathway) 

Ergebnisse:

2241: FER; FER tyrosine kinase 
56288: PARD3; par-3 family cell polarity regulator 

file1:

10000 
56288 
2241 

file2:

4301: AFDN; afadin, adherens junction formation factor 
1496: CTNNA2; catenin alpha 2 
283106: CSNK2A3; casein kinase 2 alpha 3 
2241: FER; FER tyrosine kinase 
60: ACTB; actin beta 
1956: EGFR; epidermal growth factor receptor 
56288: PARD3; par-3 family cell polarity regulator 
10458: BAIAP2; BAI1 associated protein 2 
51176: LEF1; lymphoid enhancer binding factor 1 

Was ist ein Satz Verständnis?

Dieses:

# create a set comprehension 
ids = {line.strip() for line in f} 

ist die gleiche wie:

# create a set 
ids = set() 
for line in f: 
    ids.add(line.strip()) 
+0

Das hat perfekt funktioniert - Danke auch für die Formatierung! Können Sie etwas näher erläutern, was in den Abschnitten "Zeile für Zeile" und "Pfad in Pfaden" Ihres Codes passiert? – Quintakov

+1

'für Linie in Linien' ist ein Standard-Python-Iterator. Viele Objekte (zB: "liste") implementieren eine '__next__' Methode, die diese sehr raffinierte Syntax erlaubt. Also es tut im Grunde, wie es liest, es führt die for-Schleife für jede Zeile in Zeilen, jeweils einzeln. Ist Python nicht lustig? Vielleicht sind Sie auch mit den Begriffen nicht vertraut. Ich habe den Beitrag aktualisiert, um die beiden Übersichten zu notieren. Siehe: http://stackoverflow.com/questions/1747817/create-a-dictionary-with-list-comprehension-in-python –

Verwandte Themen