2016-12-14 7 views
0

だから、ファイルからURLを読み込もうとしていて、URLが存在していれば/到達可能かどうかを確認しようとしていますか? (私は.txtファイルからURLを読んでいます)pythonでファイルからURLを読み込む?

私は取得していますエラーは次のとおりです:

name 'in_file' is not defined 

コード:

from urllib.request import urlopen 

def is_reachable(url): 
    if urlopen(url): 
     return True 
    else: 
     return False 

in_file_name = input("Enter file name: ") 
try: 
    in_file = open(in_file_name, "r") 
except: 
    print("Cannot open " + in_file) 

line = in_file.readline().replace(" ", "") 
print(line) 

counter = 0 
while line != "": 
    if is_reachable(line) == True: 
    counter += 1 
    print("The URL on line ", counter, "is unreachable!") 
    line = in_file.readline() 
+0

エラーがどのようなものです:あなたは簡単だろう

より良いアプローチを列挙使用できますか? –

+0

NameError:名前 'in_file'が定義されていません – Kris

+1

'in_file.readline()'はインデントのために 'is_reachable'が' True'を返す場合にのみ呼び出されます。 in_file:in infile:for line in infile: 'ブロックで' with open()を使用してみませんか? –

答えて

1

到達不能になる前にelseが必要です。到達不能なURLを印刷するようにチェックされていません。 URLが到達可能であっても、到達不能であることを表示しています。

counter = 0 
while line != "": 
    counter += 1 
    if not is_reachable(line): 
     print("The URL on line ", counter, "is unreachable!") 
    line = in_file.readline() 

あなたのプログラムとその他の問題があります。 1.ファイルが読み取れない場合はまだあなたのプログラムは、あなたがカウンタ変数を使用して、明示的にそれを維持している 2.を続けています。

from urllib.request import urlopen 
import sys 

def is_reachable(url): 
    try: 
     urlopen(url) 
     return True 
    except: 
     return False 

in_file_name = input("Enter file name: ") 
lines = [] 
try: 
    with open(in_file_name, 'r') as f: 
     lines = f.read().splitlines() 
except: 
    print("Cannot open " + in_file_name) 
    sys.exit(1) 

for counter, line in enumerate(lines): 
    if is_reachable(line): 
     print("The URL on line ", counter, "is reachable!") 
    else: 
     print("The URL on line ", counter, "is unreachable!") 
+0

行番号を表示するのに 'counter'を使用しているので、すべての場合に増分する必要があります。おそらく 'if is_reachable(line)がTrueではない:'エラーを出力し、次の行を読むときにインクリメントするか? –

+0

@SimonFraserはそれを指摘してくれてありがとう。 –

+0

@VikashSinghあなたのコードを試しましたが、なぜファイルが開けないのですか? – Kris

0
このコードは動作していない私はなぜわかりません

ファイルを開くことができない場合は、スクリプトを終了する必要があります。あなたのコードが現在書かれているので、ファイルを開くことができない場合は例外を表示し、その後は残りのコードを実行しようとします。

ワンクイックフィックス:

in_file_name = input("Enter file name: ") 
try: 
    in_file = open(in_file_name, "r") 
except: 
    print("Cannot open " + in_file) 
    sys.exit(1) ### you will need to import the sys module 

また、あなたの出力が間違っています。 urlopenがTrueを返すならば、REACHABLEであることを印刷しなければならないときは、それはUNREACHABLEであると言っています。

最後に、is_reachableに、あなたが開こうとしているURLと解像度の問題がある場合は可能性が例外を処理する必要があります。

def is_reachable(url): 
    try: 
     urlopen(url): 
     return True 
    except urllib.error.URLError: 
     return False 
+0

それは偽でしたが、私は実験していました。私に言ってくれてありがとう。私はそれを試してみます – Kris

+0

意味があります。あなたが遭遇する可能性のある最大の問題は最後のものだと思います。これは、urlopenへの呼び出しの周りにtry/exceptを必要とすることです。その関数は例外が発生します。何らかの理由で。 – rumdrums

0

あなたはあなたのコード内のエラーを持っている:

except: 
    print('yadaya ' + in_file_name) # you have used in_file 

私はこれをテストしていないが、動作するはずさ:

from urllib2 import urlopen # urllib is deprecated 

if urlopen('http://google.com').getcode() >= 200 and urlopen('http://google.com') < 400: 
    print ('Yes the URL exists and works.') 

あなたは余分なFを作業する必要がありますまたはリダイレクトに従います。

関連する問題