2014-09-22 42 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循环。

相关问题