【问题标题】:search for a variable in a text file在文本文件中搜索变量
【发布时间】:2015-03-02 18:27:30
【问题描述】:

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

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 吗?不确定,因为你可以告诉我是初学者。任何有关如何执行此操作的帮助或建议将不胜感激。

【问题讨论】:

  • 欢迎来到本站。你能告诉我们你运行它时它做了什么吗?
  • 这给了我想要的东西。
  • 谢谢,现在我只需要投票这个接受的答案

标签: python


【解决方案1】:

您可以使用re.split 和以下列表解析来获取数字,然后使用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

【讨论】:

  • 我知道这也将如何工作,但它可能对我的需要来说太多了。不管谢谢。
  • @wwi 不客气!因此,如果您发现此答案有帮助,您可以通过投票并接受答案来告诉社区!
【解决方案2】:

你可以使用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"

【讨论】:

    【解决方案3】:

    一般来说,如果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'
    

    如果foo.txt 确实如您所愿,请不要忘记用'\\n' 转义反斜杠。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      相关资源
      最近更新 更多