我试图在文本文件中搜索变量。
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?不确定,因为你可以告诉我一个初学者。任何有关如何做到这一点的帮助或建议将不胜感激。
答案 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}}反斜杠。