2017-04-09 72 views
1

我有一個捲曲的POST elasticsearch做:捲曲張貼elasticsearch在python

curl -XPOST "http://localhost:9200/index/name" --data-binary "@file.json" 

我怎樣才能做到這一點在Python的殼呢?基本上,因爲我需要遍歷許多json文件。我希望能夠在for循環中做到這一點。

import glob 
import os 
import requests 



def index_data(path): 
    item = [] 
    for filename in glob.glob(path): 
     item.append(filename[55:81]+'.json') 
    return item 

def send_post(url, datafiles): 
    r = requests.post(url, data=file(datafiles,'rb').read()) 
    data = r.text 
    return data 

def main(): 
    url = 'http://localhost:9200/index/name' 
    metpath = r'C:\pathtofiledirectory\*.json' 
    jsonfiles = index_data(metpath) 
    send_post(url, jsonfiles) 

if __name__ == "__main__": 
    main() 

我固定要做到這一點,但給我一個類型錯誤:

TypeError: coercing to Unicode: need string or buffer, list found 

回答

1

您可以使用requests HTTP客戶端:

import requests 

files = ['file.json', 'file1.json', 'file2.json', 'file3.json', 'file4.json'] 

for item in files: 
    req = requests.post('http://localhost:9200/index/name',data=file(item,'rb').read()) 
    print req.text 

從您的編輯,你將需要:

for item in jsonfiles: 
    send_post(url, item) 
+0

謝謝貼出我的代碼往上頂。我收到了一個我無法弄清楚的TypeError。 – user6754289

+0

你需要遍歷你的'send_post'函數,看看我的編輯。您收到的TypeError意味着您將數組指定爲'requests.post'參數,它在期望字符串的位置 –

+0

明白了,我需要在檢索文件的過程中解決一件事。感謝幫助! – user6754289

0

使用requests庫。

import requests 
r = requests.post(url, data=data) 

它是那樣簡單。