2014-09-22 35 views
0

我終於得到了幫助,並能夠統計文件中有多少特定字符,我試着通過編寫/打印一行來增強代碼if在文件中有一個特定的字符,這是我想要做的那部分代碼,沒有給出錯誤,只是不起作用。關於解決這個問題的任何建議?Python-寫一個語句,如果文件中存在某個字符

atom_count = len(set('OHCN').intersection(chain.from_iterable(f1))) 
    s = s.replace('ntyp = 11', 'ntyp = {}'.format(atom_count)) 
    f = open(filename, 'w') 
    f.write(s) 
    f.flush() 
    f.close() 

    linenum = f.readLines() 

    if {} == 'H': 
     f.write('Hydrogen') + linenum[22] 
    elif {} == 'C': 
     f.write('Carbon') + linenum[23] 
    elif {} == 'N': 
     f.write('Nitrogen') + linenum[24] 
    elif {} == 'O': 
     f.write('oxygen') + linenum[25] 
+0

你覺得呢'{}'呢? – 2014-09-22 18:30:53

+0

我以爲這是我在atom_count中設置的字符範圍,假設我在那裏不正確 – octain 2014-09-22 18:33:11

+1

'{}'是一個空字典,所以它永遠不會等於一個字符串。 – kindall 2014-09-22 18:38:07

回答

2

您可以利用字典來提供您需要的話指的是獲得原子(未經測試的例子)後查找信息:

atom_lookup = { 
    'H': ('Hydrogen', 22), 
    'C': ('Carbon', 23), 
    # etc.... 
} 

with open('ohcn_file') as f1, open('other_file') as f2: 
    atoms_present = atom_lookup.viewkeys() & chain.from_iterable(f1) 
    f2_lines = list(f2) 
    for atom in atoms_present: 
     atom_name, atom_lineno = atom_lookup[atom] 
     atom_line = f2_lines[atom_lineno] 
     # do something with atom_name and atom_line... 
+0

謝謝!必須做一些修改,但工作完美! – octain 2014-09-23 18:30:00

1

你在這裏工作有幾個問題。

首先,正如其他人指出的那樣,{}是一個空字典,絕不會等於除另一個空字典以外的任何東西。花括號在字符串中的含義與代碼中的不同。在一個字符串'Hello, {}'.format('World')將做你所期望的,但在一個字符串之外,它代表一個字典數據類型。

其次,您的文件操作順序不正確。您應該打開文件,讀取其內容,然後關閉文件。

第三,你需要用某些東西來迭代文件內容,比如for循環。

相關問題