0

初心者の質問です。変数gerritのデータをリストgerrit_refsと照合し、対応する一致を取得して変数に保存する必要がある次のコードがあります。どうすればよいですか?

'''
gerrit_refs:
refs/changes/89/202089/4
refs/changes/39/205739/2
refs/changes/94/195594/6
refs/changes/90/202090/4
refs/changes/92/202092/4
'''

def main ():
    gerrit=205739
    with open('gerrit_refs.txt', 'r') as f:
        # Here we make a list of refs based on the file
        gerrit_refs = [line.strip() for line in f]
    match = None
    for ref in gerrit_refs:
        if gerrit in ref:
            match = ref
            print match
            break

if __name__ == '__main__':
    main()

エラー:-

TypeError:'in'では、左オペランドとして文字列が必要です。

4

2 に答える 2

1
next((l.strip() for l in open('gerrit_refs.txt') if str(gerrit) in l), False)
于 2012-12-28T20:22:40.863 に答える
1

リスト内包表記の一致する行を除外します。

def main ():
    gerrit = 205739
    gerrit_str = str(gerrit)
    with open('gerrit_refs.txt', 'rb') as f:
        # Here we make a list of refs based on the file
        gerrit_refs = [line.strip() for line in f if gerrit_str in line]

    if gerrit_refs:
        # At least one match was found.
        print gerrit_refs

gerrit検索変数を文字列に変更する必要があることに注意してください。演算子は混合変数ではin機能しません。

これは、リストを返すため、複数の参照がある場合に機能します。最初の一致を取得したいだけの場合は、最初のアイテムを抽出するだけです。

if gerrit_refs:
    print "First match:", gerrit_refs[0]
于 2012-12-28T19:48:53.667 に答える