2017-02-09 4 views
0

Ich bin sehr neu in Python und versuche, eine Antwort von der URL für jeden Benutzer in der Datei user.csv zurückzugeben, die JSON-Nachricht zurückzugeben und sie dann in eine CSV-Datei zu zerlegen . Ich bin mir nicht sicher, was ich in den Rückgabebereich schreiben soll oder wie ich die Nachricht aufteilen soll. Dies ist ein Beispiel für die Nachricht, die mir zurückgegeben wird, wenn ich die HTTP-Anforderung erhalten:Verwenden von Python zum Senden einer HTTP-Anfrage und zum Analysieren von JSON

{"msg": {"mes": "four", "high": 1230, "low": 0}}"

Hier ist, was ich bisher habe, aber ich bin immer einen Fehler:

TypeError: expected string or buffer

import requests 
import json 
import csv 

def getRows(data): 
    return [] 

url = 'http://test_url' 

with open('user.csv', 'rU') as data_file: 
    data = csv.DictReader(data_file) 
    for row in data: 
     current_user = row['mdn'] 
     r = requests.get(url) 
     data = json.loads(data) 
     fname = "mydata.csv" 
with open(fname,'wb') as outf: 
    outcsv = csv.writer(outf) 
    outcsv.writerows(getRows(data)) 
+0

können Sie mehr Details (oder vielleicht ein Beispiel) auf den Inhalt Ihrer Eingabe csv-Datei (mdn.csv) geben? Können Sie auch genauer angeben, welche Rolle der "current_user" in der Anfrage hat? Wenn Sie nur r = requests.get (URL) für jeden Benutzer aufrufen, erhalten Sie immer die gleiche Antwort – caspillaga

+0

die Eingabe csv-Datei hat eine Liste von Benutzern. Jeder wird die URL treffen und eine JSON-Nachricht zurückgeben, die der von mir angegebenen ähnelt. Ich möchte dann den Benutzer, Nachricht, und analysieren Sie es und konvertieren Sie die gesamte Liste mit der JSON-Nachricht in eine CSV. – c3win90

+0

Ok, aber was ist der Unterschied zwischen der Anfrage für user1 und user2? In Ihrem Code ist die Anfrage für jeden Benutzer identisch, sodass die Antworten für alle Benutzer immer dieselben sind. Vielleicht solltest du current_user irgendwie in der Anfrage senden? – caspillaga

Antwort

1

Mit den von Ihnen bereitgestellten Informationen können Sie beispielsweise Folgendes tun:

import requests 
import csv 

url = 'http://test_url' 
with open('user.csv', 'rU') as data_file: 
    data = csv.DictReader(data_file) 
    for row in data: 
     current_user = row['mdn'] 
     r = requests.get(url) # probably you also need to send current_user somehow. "r = requests.get(url+'?user='+current_user)" maybe? 
     string_json = r.text.encode('utf-8') 
     json = eval(string_json) # only use this command if you are sure that string_json only contains a valid json and no malicious code instead 
     with open('outputfile.csv','a') as outfile: 
      outfile.write(current_user+';'+json["msg"]["mes"]+';'+json["msg"]["high"]+';'+json["msg"]["low"]+'\n') 

Geben Sie weitere Informationen zur Verwendung der HTTP-Anforderung an d über das Format Ihres CSV für eine genauere Antwort

+0

Danke! Die HTTP-Anforderung gibt basierend auf jedem Benutzer in der Datei user.csv Informationen zurück, sodass die Antwort unterschiedlich ist. In diesem Fall haben Sie recht, wenn Sie current_user einbinden müssen. Wenn Sie ausführen, was Sie zur Verfügung gestellt haben, bekomme ich TypeError: kann 'str' und 'int' Objekte nicht verketten. – c3win90

+0

Bekam es zu arbeiten, danke !!!! – c3win90

Verwandte Themen