2 回答

TA貢獻1829條經(jīng)驗 獲得超9個贊
問題是當(dāng)您從文件中讀取 url 時。當(dāng)您讀取url
變量中的 url 時,它帶有一個結(jié)尾\n
換行符。您必須刪除它,然后使用該網(wǎng)址。
替換這一行:
addr1 = socket.gethostbyname(url)
有了這個:
addr1 = socket.gethostbyname(url.rstrip())
此外,我認為您對 python 的了解并不多,因為您的代碼有各種需要更正的東西。
您有兩個同名的文件引用
f
。不要這樣做,它會導(dǎo)致一些奇怪的行為。您一次又一次地打開文件
for-loop
,它不是pythonic。只需打開文件一次,當(dāng)任務(wù)結(jié)束時,關(guān)閉文件。用于
with
打開文件,您以后不必關(guān)閉文件。with
僅出于此目的,因此無需關(guān)閉文件。
您可以檢查給定代碼以了解上述幾點。
import socket
with open("test.txt", 'r') as in_file, open("alive.txt", "a") as out_file :
for url in in_file:
try:
addr1 = socket.gethostbyname(url.rstrip())
print(addr1 + " is a valid url")
out_file.write("\n" + addr1)
except:
print("not valid")

TA貢獻1820條經(jīng)驗 獲得超3個贊
也許您可以嘗試更改函數(shù)的順序:
import socket
f = open("alive.txt", "w")
with open("output.txt") as fp:
line = fp.readline()
while line:
try:
clean_line = line.strip()
addr1 = socket.gethostbyname(clean_line)
print("valid url : " + addr1 + " from " + clean_line)
f.write(addr1 + "\n")
except:
print("not valid: " +addr1 + " from " + clean_line)
line = fp.readline()
f.close()
添加回答
舉報