在文本文件中搜索变量

时间:2015-03-02 18:27:31

标签: python

我试图在文本文件中搜索变量。

sid = '185'
a = ((sid)"\n")
with open(filename) as f:
  data = f.readlines()


if a in data:
        print 'its here'
else:
        print 'its NOT here'

这是我的foo.txt

  

[' 306 \ n',' 303 \ n',' 313 \ n',' 323 \ n',&# 39; 417 \ n',' 281 \ n',' 304 \ n',' 322 \ n',' 320 \ n&# 39;,' 319 \ n',' 308 \ n',' 310 \ n',' 414 \ n',&#39 ; 415 \ n',' 314 \ n',' 312 \ n',' 307 \ n',' 305 \ n&#39 ;,' 285 \ n',' 286 \ n',' 318 \ n',' 283 \ n',' 282 \ n',' 294 \ n',' 309 \ n',' 416 \ n',' 418 \ n' ,' 321 \ n',' 185 \ n']

我认为我的问题在于正确定义/ n?不确定,因为你可以告诉我一个初学者。任何有关如何做到这一点的帮助或建议将不胜感激。

3 个答案:

答案 0 :(得分:3)

您可以使用re.split并按照列表理解来对数字进行grub,然后使用in操作数来检查成员资格:

>>> s = """['306\n', '303\n', '313\n', '323\n', '417\n', '281\n', '304\n', '322\n', '320\n', '319\n', '308\n', '310\n', '414\n', '415\n', '314\n', '312\n', '307\n', '305\n', '285\n', '286\n', '318\n', '283\n', '282\n', '294\n', '309\n', '416\n', '418\n', '321\n', '185\n']"""
>>> import re
>>> def check(var):
...    return var in [int(i.strip()) for i in re.split(r'[\[\]\',]*',s) if i.strip()]
... 
>>> check(303)
True
>>> check(444)
False

在您的情况下,您需要使用open(filename).read()而不是s。对于较大的文件,您可以使用set更有效地检查成员资格:

>>> def check(var):
...    return var in set(int(i.strip()) for i in re.split(r'[\[\]\',]*',s) if i.strip())
... 
>>> check(444)
False
>>> check(305)
True

答案 1 :(得分:1)

您可以使用re.search功能搜索字符串

foo = """['306\n', '303\n', '313\n', '323\n', '417\n', '281\n', '304\n', '322\n', '320\n', '319\n', '308\n', '310\n', '414\n', '415\n', '314\n', '312\n', '307\n', '305\n', '285\n', '286\n', '318\n', '283\n', '282\n', '294\n', '309\n', '416\n', '418\n', '321\n', '185\n']"""

sid = '185'
a = sid + '\n'

if re.search(a,foo):
     print "its here"
else:
     print "its not here"

答案 2 :(得分:1)

一般情况下,如果foo.txt中有多行可以使用:

sid = '185'
a = sid + '\\n'
filename = 'foo.txt'
with open(filename) as f:
    for line in f:
        if a in line:
            print 'its here'
            break
    else:
        print 'its NOT here'

如果'\\n'确实与您提供foo.txt字面意义相同,请不要忘记使用{{1}}反斜杠。