2017-01-25 7 views
0

私は、以下の形式でテキストファイルをスキャンする小さなスクリプトを書いています。逆の動作をするIF文

enter image description here

次にリダイレクトがある場合のみ、リダイレクトURLで別のテキストファイルを出力します。それ以外の場合は、「リダイレクトしない」を印刷したかったのです。しかし何らかの理由で、正反対のことが起こります。

以下は私のコードですが、私が間違ったことを教えてください。

import urllib.request 

inc_input = input("Please enter the file name\n") 
file_name = open(inc_input) 
f = open('output.txt', 'w') 
for line in file_name: 
    eachurl = line.strip() 
    redirected = urllib.request.urlopen(eachurl) 
    finalurl = redirected.geturl() 

    if eachurl == finalurl: 
     f.write(eachurl + "\t" + finalurl + "\n") 
    else: 
     f.write(eachurl + "\t" + "No redirection" + "\n") 
f.close() 
+1

テストテキストをプレーンテキストとして含めると、コードをテストできます。 – usr2564301

+1

テストの前に 'eachurl'と' finalurl'を出力できますか? 'strip()'は便利ですが、他にも問題があります。 –

+0

あなたはeachurlとfinalurlを印刷しようとするだけで、あなたの答えを見つけることができます。 –

答えて

1
if eachurl != finalurl: #when the urls are not same, it's a redirection 
    f.write(eachurl + "\t" + finalurl + "\n") 
else: 
    f.write(eachurl + "\t" + "No redirection" + "\n") 
+1

このように 'if'を書きたい場合、' eachurl!= finalurl'を使うのはもっと慣れています。実際に私があなたの答えを読んで初めて、私は「not」を見たこともなく、混乱しました!しかし、それでも、else節を持つ 'if'文で負の比較をするよりも、2つの節を入れ替える方が良いと思います。 –

2

あなたのロジックはあなたが期待するものとは反対のようだ、私は明確にするために、コメントを追加しました:

if eachurl == finalurl: 
    # no redirection happened since we're in the original url (==) 
    f.write(eachurl + "\t" + finalurl + "\n") 
else: 
    # redirection happened, different url 
    f.write(eachurl + "\t" + "No redirection" + "\n") 

使用notは、条件を逆転や体を反転させます。現在のところ、このメッセージは誤解を招くものです。

+0

または '=='の代わりに '!=' – jszakmeister

+0

ああ、それは実際には非常に明白です、ありがとう! – firko