2017-10-17 88 views
0

我想要獲取文本文件(內容)中與某個字符串對應的行的索引(在本例中爲InChI = 1S/C11etc ..),這裏是我的代碼:找到文本文件中的行索引python

with open('compounds.dat', encoding='utf-8', errors='ignore') as f: 
    content = f.readlines() 
    index = [x for x in range(len(content)) if "InChI=1S/C11H8O3/c1-6-5-9(13)10-7(11(6)14)3-2-4-8(10)12/h2-5" in content[x].lower()] 
    print(index) 

但是,我得到空括號[]。但我敢肯定的是,線的存在,因爲如果我運行此:

for line in f: 
    if u"InChI=1S/C11H8O3/c1-6-5-9(13)10-7(11(6)14)3-2-4-8(10)12/h2-5" in line: 
     l = line 

我得到我感興趣的行。

+2

您的模式具有大寫字母,並且在比較之前爲您的字符串'content [x] .lower()'降低了...爲什麼? –

+0

使用正則表達式..如果你的文件不是太大,Python正則表達式的性能相當不錯。 –

回答

1

擴展我的評論,調用lower()將小寫您的目標字符串,而您的搜索字符串有大寫字母 - 這是不可能匹配任何類似的東西。

此外,您不必遍歷該範圍。 for可以直接迭代content中的項目。這將工作。

search_str = "InChI=1S/C11H8O3/c1-6-5-9(13)10-7(11(6)14)3-2-4-8(10)12/h2-5" 
lines = [x for x in content if search_str in content] 
0

不要在代碼中使用.lower(),它應該可以正常工作。