2012-06-21 60 views
4

所以我是新的python,我非常需要幫助。在url中傳遞變量?

我有一個文件,它有一堆ID(整數值)寫在他們的。它是一個文本文件。

現在我需要將文件內的每個id傳遞給一個url。

例如「https://example.com/[id]」

將這樣

A = json.load(urllib.urlopen("https://example.com/(the first id present in the text file)")) 
print A 

做什麼,這將基本上做的是,它會讀到某些信息存在於上述url中的id並顯示它。我希望它能夠以循環格式工作,在這種格式中,它將讀取文本文件中的所有ID並將它傳遞給'A'中提到的URL並持續顯示值..有沒有辦法做到這一點?

如果有人能幫助我,我會非常感激!

回答

10

舊風格的字符串連接可以用來

>>> id = "3333333" 
>>> url = "https://example.com/%s" % id 
>>> print url 
https://example.com/3333333 
>>> 

新樣式的字符串格式化:

>>> url = "https://example.com/{0}".format(id) 
>>> print url 
https://example.com/3333333 
>>> 

與小改提及avasal文件的閱讀:

f = open('file.txt', 'r') 
for line in f.readlines(): 
    id = line.strip('\n') 
    url = "https://example.com/{0}".format(id) 
    urlobj = urllib.urlopen(url) 
    try: 
     json_data = json.loads(urlobj) 
     print json_data 
    except: 
     print urlobj.readlines() 
+0

+1剝換行。 – SuperSaiyan

+0

非常感謝你幫助我。我現在正面臨一個新問題。假設我嘗試使用say,只是少數id來讀取文本文件,它在執行時沒有問題。但是我從我正在閱讀ID的文本文件中有很多。代碼無法執行。這是什麼原因?有沒有辦法解決這個問題? – user1452759

+0

@ user1452759:你得到的錯誤是什麼?從那裏開始會很好。即使您有很多ID,解決方案也應該可以工作。很有可能並非所有的url獲取都會返回可以加載到json中的數據 – pyfunc

2

懶人風格:

url = "https://example.com/" + first_id 

A = json.load(urllib.urlopen(url)) 
print A 

舊式:

url = "https://example.com/%s" % first_id 

A = json.load(urllib.urlopen(url)) 
print A 

新款2.6+:

url = "https://example.com/{0}".format(first_id) 

A = json.load(urllib.urlopen(url)) 
print A 

新款2.7+:

url = "https://example.com/{}".format(first_id) 

A = json.load(urllib.urlopen(url)) 
print A 
1

您需要做的第一件事就是知道如何從文件中讀取每一行。首先,你必須打開文件;你可以用一個with語句做到這一點:

with open('my-file-name.txt') as intfile: 

這將打開一個文件,並存儲在intfile該文件的引用,它會在你的with塊結束時自動關閉文件。然後您需要從文件中讀取每一行;你可以做到這一點與一個普通的舊的for循環:

for line in intfile: 

這將遍歷文件中的每一行,閱讀他們一次一個。在你的循環中,你可以訪問每行line。剩下的就是使用您提供的代碼向您的網站提出請求。你缺少的一點就是所謂的「字符串插值」,它允許你用其他字符串,數字或其他任何字符串格式化字符串。在你的情況下,你想把一個字符串(你的文件中的行)放在另一個字符串(URL)中。要做到這一點,您可以使用%s標誌和字符串插值算,%沿:

url = 'http://example.com/?id=%s' % line 
A = json.load(urllib.urlopen(url)) 
print A 

全部放在一起,你會得到:

with open('my-file-name.txt') as intfile: 
    for line in intfile: 
    url = 'http://example.com/?id=%s' % line 
    A = json.load(urllib.urlopen(url)) 
    print A 
+0

非常感謝你幫助我。我現在正面臨一個新問題。假設我嘗試使用say,只是少數id來讀取文本文件,它在執行時沒有問題。但是我從我正在閱讀ID的文本文件中有很多。代碼無法執行。這是什麼原因?有沒有辦法解決這個問題? – user1452759

+0

你能發佈錯誤信息嗎?如果不知道問題是什麼,很難說。 –