2017-08-24 66 views
-1

該程序獲取三個文件並比較三個文件中的關鍵字,並僅打印那些專門存在於「AGO1」中而不存在於其他中的條目。我可以在控制檯上打印結果。請讓我知道如何通過函數「OnlyArgSeq」的參數將結果寫入文本文件「Only_AGO1.txt」。通過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

那麼,你想知道如何寫入一個文本文件? – jacoblaw

+2

可能重複[重定向標準輸出到Python中的文件?](https://stackoverflow.com/questions/4675728/redirect-stdout-to-a-file-in-python) – Erich

+0

你要求重定向標準輸出嗎?導入sys並將stdout設置爲文件。之後,你可以這樣做:https://stackoverflow.com/questions/14245227/python-reset-stdout-to-normal-after-previously-redirecting-it-to-a-file – Erich

回答

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) 

電話爲:

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

爲您的具體使用情況。

+0

謝謝@Erich,根據您的建議更改,但顯示SyntaxError:無效語法在「def OnlyArgSeq('filename',[AGO,* kwargs]):「我正在使用python 2.7 – firoz

+0

不要將其他參數放在括號中。這些都是爲了解釋我的答案而構成的僞語法。相反,你應該寫下你對用例的看法,例如def func(文件名,AGO,* args)在你的情況下。然後按照我在答案中包含的那樣調用它。 – Erich

0

改變你的函數如下 -

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

非常感謝。它工作正常。 – firoz