2017-08-24 2 views
-1

Dieses Programm nimmt drei Dateien und vergleicht den Schlüssel zwischen drei Dateien und nur diejenigen Einträge, die speziell in "AGO1" und nicht in anderen vorhanden sind. Ich kann das Ergebnis auf der Konsole ausdrucken. Bitte lassen Sie mich wissen, wie kann ich Ergebnisse in eine Textdatei "Only_AGO1.txt" NUR über das Argument der Funktion "OnlyArgSeq" schreiben.Drucken des Ergebnisses in eine Datei durch Funktion in Python

import sys 
file1 = sys.argv[1] 
file2 = sys.argv[2] 
file4 = sys.argv[3] 

AGO={} 
AGO1={} 
AGO2={} 
AGO4={} 

# Function "ArgSeq" to read each line of Argonoute "file" (Sequence, copy number) 
# and put into a dictionary "AGO" 
def ArgSeq(AGO,file): 
    with open(file) as f: 
     for line in f: 
      (key, val) = line.split() 
      AGO[key] = val 

ArgSeq(AGO1,file1) # AGO1 dictionary 
ArgSeq(AGO2,file2) # AGO2 dictionary 
ArgSeq(AGO4,file4) # AGO4 dictionary 


# Function "OnlyArgSeq" to find sRNA loading only to specific ARG 
# eg sorting into ARG1, but not ARG2,ARG4 
def OnlyArgSeq(AGO, *kwargs): 
    only_AGO = {k:v for k,v in AGO.items() 
       if not any(k in dicts for dicts in (kwargs))} 
    for key in only_AGO.keys(): 
     print key, only_AGO[key] 

OnlyArgSeq(AGO1, AGO2, AGO4) # sRNA sorting specifically to AGO1, Only_AGO1.txt 

AGO1.txt

AAAAAAAATTGTTGCCGTTGG 1 
AAAAAAACTTTGCTTATTTGTTCA 1 
AAAAAAATGCTTATTTCAAATCGG 1 
AAAAAAATGGGTCGGTTGTTTCA 1 
AAAAAAATTGTTGCCGTTGGG 1 

AGO2.txt

TTTTTTTTTTCGTCAGTTGGGTTC 1 
TTTTTTTTTTGTCAAATTCTG 1 
TTTTTTTTTTTCTTTGTCATCCGA 1 
TTTTTTTTTTTGTCATCCAAA 1 
TTTTTTTTTTTTATGATGTACA 1 
AAAAAAATTGTTGCCGTTGGG 2 

AGO4.txt

TTTTTTTTGAATATTTTGGTTGG 1 
TTTTTTTTGGTAAGCTGTTAA 1 
TTTTTTTTTACTGTAGTTTCTT 1 
TTTTTTTTTCATGATTTCTTCCTT 2 
TTTTTTTTTTAAATATTCTTTTGCCT 3 
AAAAAAATTGTTGCCGTTGGG 2 
+0

So sind Sie wollen wissen, wie man eine Textdatei zu schreiben? – jacoblaw

+2

Mögliches Duplikat von [Redirect stdout zu einer Datei in Python?] (Https://stackoverflow.com/questions/4675728/redirect-stdout-to-a-file-in-python) – Erich

+0

Fragen Sie nach stdout umleiten? Importieren Sie sys und setzen Sie stdout in eine Datei. Danach können Sie dies tun: https://stackoverflow.com/questions/14245227/python-reset-stdout-to-normal-after-previously-redirecting-it-to-a-file – Erich

Antwort

0

I wanted to put my file name as argument eg: OnlyArgSeq("Only_AGO1.txt"AGO1, AGO2, AGO4). And the output will write into "Only_AGO1.txt"

def myFunc(filename, [other args....]): 
    #do some things 

    with open(filename, 'w') as fOBJ: 
     fOBJ.write(myVariable) 

Ruf als:

myFunc("ONLY_AGO1.txt", AGO1, AGO2, AGO3) 

für Ihren speziellen Anwendungsfall.

+0

Vielen Dank @Erich, ich ändere entsprechend Ihrem Vorschlag, aber zeigen SyntaxError: ungültige Syntax bei "def NurArgSeq ('Dateiname', [AGO, * kwargs]): "Ich benutze Python 2.7 – firoz

+0

Die anderen Argumente nicht in Klammern setzen. Diese sollten eine Pseudosyntax sein, um meine Antwort zu erklären. Stattdessen sollten Sie es schreiben, wie Sie für den Anwendungsfall, z. def func (Dateiname, AGO, * Argumente) in Ihrem Fall. und nenne es dann so, wie ich es in meine Antwort aufgenommen habe. – Erich

0

Passen Sie Ihre Funktion an die folgende -

def OnlyArgSeq(filename, AGO, *kwargs): 
    only_AGO = {k:v for k,v in AGO.items() if not any(k in dicts for dicts in (kwargs))} 

    with open(filename) as fp: 
     for key in only_AGO.keys(): 
      #print key, only_AGO[key] 
      fp.write("%s %s" % (key, only_AGO[key])) 
+0

Vielen Dank. Es funktioniert gut. – firoz

Verwandte Themen