1

入力ファイル「list.txt」から削除しようとしているinvalid_change変数にIDがあり、以下のようにresults.txtファイルを作成しようとしています。以下の期待される出力..

'''
INPUT(list.txt:-

350882 348521 350166
346917 352470
360049


EXPECTEDOUTPUT(results.txt):-
350882 348521 350166
346917
360049
'''
invalid_list=['352470','12345']

f_write = open('results.txt', 'wb')

with open('list.txt','r') as f :
    for line in f :
        #delete the whole line if any invalid gerrit is presnet
        gerrit_list = line.strip().split(' ')

        ifvalid = True
        for gerrit in gerrit_list:
            try:  # check if invalid gerrit is present
                invalid_gerrit.index(invalid_change)
                ifvalid = False
                break
            except:
                pass

        if ifvalid:
            f_write.write(line)

f_write.close()
4

2 に答える 2

0

問題は、この行に到達したときです。

346917 352470

ifvalid変数がに設定されているFalseため、この特定の行は (調整されていても) 出力ファイルに書き込まれません。

可能な解決策:

  1. 文字列を変更します。正規表現を使用します。彼らは交換を行います。
  2. ファイルへの「無効な」行の書き込みをスキップしないでください。削除する ID なしで準備してください (解決策 1 のように)。

ご不明な点がございましたら、お問い合わせください。

コードの他の問題は次のとおりです。

  • おむつのアンチパターン ( を含むすべての例外をキャッチするNameError一方で、 のみをキャッチValueErrorするか、キーワードを含むテストを実行する必要があります) - これが、および変数inの欠如に関連するエラーが表示されない理由です。invalid_changeinvalid_gerrit
  • を開いたり閉じたりする代わりに、Python 2.7+ または 3.1+ を使用している場合は、既に使用しているステートメントf_writeでも使用できます。with
  • str.split()デフォルトでは空白で分割され、結果から空の文字列が削除されるため、書く代わりline.strip().split(' ')line.split()
于 2013-07-10T02:33:40.183 に答える