2015-03-02 103 views
2

即時嘗試搜索文本文件中的變量。在文本文件中搜索變量

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', '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']

我認爲我的問題在於正確定義/ n?不確定,因爲你可以告訴我一個初學者。任何幫助或建議如何做到這一點,將不勝感激。

+1

歡迎來到本網站。你能告訴我們它在運行時的功能嗎? – msturdy 2015-03-02 18:30:09

+4

'a = sid +「\ n」'.. – 2015-03-02 18:33:31

+0

這給了我想找的東西。 – wwi 2015-03-02 18:39:05

回答

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 
+0

我明白這也能起作用,但它可能對我需要的東西有很大幫助。不管謝謝你。 – wwi 2015-03-02 18:40:55

+0

@wwi不客氣!所以如果你發現這個答案有幫助,你可以通過投票和接受答案告訴社區! – Kasramvd 2015-03-02 18:46:15

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" 
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真的是字面上你給它轉義反斜線。