2017-02-02 39 views
-1

我有一個輸入是WHOIS_Python.csv。它包含一列四個IP,四行。TypeError:無法連接CSV中的'str'和'list'對象

我會運行下面的代碼:

import csv 
import requests 

API_URL = "http://ip-api.com/line/" 

with open('WHOIS_Python.csv') as csvfile: 
    IPReader = csv.reader(csvfile, quotechar='|') 
    for row in IPReader: 
     res = requests.get(API_URL + ''.join(row) + "?fields=query,as") 
     print(res.text) 

這是目前的結果:

222.22.222.22 


222.22.2.22 


22.222.2.222 


2.2.222.22 

我已經運行下面的代碼測試的API:

import requests 

IP = "74.125.68.100" 
API_URL = "http://ip-api.com/json/" 

res = requests.get(API_URL + IP + "?fields=query,as") 
print(res.text) 

我會收到以下結果(這是我想得到的結果):

AS15169 Google Inc. 
74.125.68.100 

最初,我得到了「TypeError:無法連接'str'和'list'對象」,但現在不是問題。我想從我測試API時獲得相同的結果。

+2

什麼是「IP」?你不顯示它 –

+0

行不在你的for循環中。 'IP'從哪裏來? –

+0

我的歉意,它應該說:對於IPReader中的行: res = requests.get(API_URL + row +「?fields = query,as」) print(res.text) – LazyPanda

回答

0

row是一個列表。你不能在python中連接字符串和列表。你有幾個選擇。

  1. 轉換的字符串列表:

    res = requests.get([API_URL] + row + ["?fields=query,as"])

  2. 轉換列表到字符串(這是你很可能尋找更多):

    res = requests.get(API_URL + ''.join(row) + "?fields=query,as")

如果該行是列表的列表,那麼您可以應用上述內容(如果需要),和/或對您正在查找的數據進行下標,即row[0]

+0

謝謝mrdomoboto。我嘗試了第二個建議,但它只返回了IP列表。我不再收到錯誤信息,但它只返回了IP列表,而不是AS – LazyPanda

+0

如果您不告訴我們您的數據是什麼樣的,那麼我們很難嘗試和幫助您。請給我們一個清晰的輸入(數據進入即csv)輸出(計算後的數據,即'res'是什麼)例子。 @LazyPanda – ospahiu

+0

可以理解。我已經更新了原文,希望能夠提供一些清晰的內容。如果您需要更多信息,請告訴我。 – LazyPanda

相關問題