2015-09-05 154 views
-2

我寫了下面的代碼,但出現錯誤:名稱'acc'未定義。我如何解決它?錯誤:未定義變量名稱

import csv 

    with open(r"C:\Users\garfield\Python27\trial.txt") as file,  open(r"C:\Users\garfield\Python27\outp.csv", "a+") as f: 
x=file.read() 
m=x.split() 
writer = csv.writer(f, delimiter =",",quoting=csv.QUOTE_MINIMAL) 
for i in range(len(m)-1): 
    if "ACCESSION" in m[i]: 
     acc=m[i+1] 
    if '/host' in m[i]: 
     host1=m[i].split('/host')[1].split('\n')[0] 
     host2=m[i+1] 
     host=host1+" "+host2 
    if "5'UTR" in m[i]: 
     utr=m[i+1] 
    data=[acc,host,utr] 
    writer.writerow(data) 
+1

您應該發佈一個MCVE,以便人們可以重現您的問題。但要確保'acc'被定義爲導致'data = [acc,host,utr]'的所有路徑。 – juanchopanza

+0

您是否試圖將單行寫入csv? –

+0

你正在做一些奇怪的事情。你閱讀整個文件然後分割它。這可能不會做你想做的事情。然後你用'if'檢查這三個字符串,但是如果在第一個'm [i]'中找不到它們中的任何一個,你會得到這個錯誤。即使你沒有,我也不確定這是你想要的,因爲這些值將一直存在,直到找到另一個字符串(如果你使用字符串作爲標誌,這是有意義的)。 –

回答

0

從您的代碼看起來,你正試圖解析完整的文件,從中創建acc/utr/host變量,然後將它寫入到CSV,對我來說,它看起來像你想寫什麼是一個單一的行中的CSV,完整inputfile中後作爲被處理,如果是的話,對於線壓痕 -

data=[acc,host,utr] 
writer.writerow(data) 

是錯誤的,它應在for循環外被縮進,不裏面示例 -

for i in range(len(m)-1): 
    if "ACCESSION" in m[i]: 
     acc=m[i+1] 
    if '/host' in m[i]: 
     host1=m[i].split('/host')[1].split('\n')[0] 
     host2=m[i+1] 
     host=host1+" "+host2 
    if "5'UTR" in m[i]: 
     utr=m[i+1] 
writer.writerow([acc,host,utr])   #there is no need for an extra variable here. 

此外,您應該爲所有三個變量設置一些默認值,以處理在文件中找不到特定行的情況。