2017-09-27 20 views
0

我的代碼是:問題與製作一個字符串列表,不斷收到一個錯誤,它是一個列表,當我使用一個字符串的方法,我該如何解決這個問題?

import sys 

filename = sys.argv[1] 

def make_header(genbank_file): 
    openfile = open(genbank_file) 

    for new_line in openfile: 

     if new_line.startswith("DEFINITION",): 
      definition_string = new_line 

     if new_line.startswith("VERSION"): 
      version_string = new_line 

     if new_line.startswith("ACCESSION"): 
      accession_string = new_line 

    definition_string = definition_string.strip("DEFINITION") 
    definition_string = definition_string.strip(" ") 

    version_string = version_string.replace(" ","") 
    version_string = "".join(version_string) 

    for char in str(version_string): 
     version_string = version_string.split(':',1)[1:] 

    header = ">gi|" + version_string + accession_string + definition_string 

    return header 


print(make_header(filename)) 

我不知道爲什麼變量version_string不是字符串,它應該是一個自動,因爲它是從一個文本文件中取出,如果我沒有記錯,但我試過用version_string = str(version_string)version_string = "".join(version_string),但即使在那之後我仍然得到錯誤:

version_string = version_string.split(':',1)[1:] 
AttributeError: 'list' object has no attribute 'split' 

version_string儼然成爲東西我不能變成一個字符串? 當我打印它時,它顯示VERSIONNG_012637.1GI:255652911,因爲空格被刪除。

+0

而不是添加「解決」的問題只是[接受](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)幫助你解決這個問題的答案或者如果你自己找到了解決方案(它與現有的答案有很大的不同),那麼你也可以[自我回答](https://stackoverflow.com/help/self-answer)你的問題。 – MSeifert

回答

0
version_string = version_string.split(':',1)[1:] 

您此行循環裏面,它改變了version_string值。

第一次確實是一個字符串,但.split()返回一個列表,並且[1:]給出了該列表的一部分,所以在第一次之後它是一個列表。

您應該將其更改爲[1]而不是[1:],因爲它給出了拆分的第一個元素,它又是一個字符串。

+0

感謝您的快速響應,現在它已被修復,我沒有意識到該功能是將它變成列表的人,我認爲它給了一個錯誤,因爲它之前是一個列表,我的感謝。 –

相關問題