0

我需要一些关于我的代码的帮助。以下是我目前的问题:

  1. 当变量行匹配时,我需要在numrefs 中获取匹配的值,示例如下。
  2. 我不确定我if是否正确构建了 -statement。

代码:

import subprocess

def p4 (base_num):

    numrefs = ['nums/89/202089/4', 'nums/39/205739/2', 'nums/94/195594/6']
    num_ignore = [150362, 147117, 147441, 143446, 200914]
    ''''
    num_ids.txt
    202089
    205739
    195594
    202090
    202092
    202091
    202084
    202088
    202086
    202076
    202083
    206057
    206056
    '''

    with open('./num_ids.txt', 'rb') as f:
    # Iterate over the file itself
        for line in f:
            num = int(line)
            if num > base_num and num not in num_ignore and line in numrefs:
                #get the match when line matches numrefs
                #if line is 20289,it should match the value nums/89/202089/ in  num_refs and print it here,how can I do it?
                print "OVER"

def main():
    base_num=203456
    p4(base_num)

if __name__ == '__main__':
    main()
4

1 回答 1

1

如果我正确理解了这个问题,那么您的代码失败有两个原因:

  1. 标识的字符串line将以\n: 结尾,这需要strip在搜索 inside 之前进行 ped numrefs
  2. line in numrefs总是会失败,因为字符串numrefs更长。看起来您想在这些字符串中进行搜索。

这是p4()解决这两个问题的版本。

def p4(base_num):
    numrefs = ['nums/89/202089/4', 'nums/39/205739/2', 'nums/94/195594/6']
    num_ignore = [150362, 147117, 147441, 143446, 200914]

    with open('./num_ids.txt', 'rb') as f:
        for line in f:
            text = line.strip()  # Trim trailing whitespace and newline
            num = int(text)
            if (num > base_num
                    and num not in num_ignore
                    # Check for any substring in list of strings
                    and any(text in numref for numref in numrefs)):
                print text

如果您需要打印找到的numref字符串(如果存在),则将if-statement 更改为:

            if num > base_num and num not in num_ignore:
                result = [numref for numref in numrefs if text in numref]
                if result:
                    print result[0]

这个if-statement 应该被提取到它自己的、可测试的方法中。

于 2012-12-31T09:24:38.250 回答