我構建了一個網路應用程式,用戶可以在其中使用 CSV 檔案上傳聯系人。
上傳 CSV 檔案后,我想將標題欄位映射到應用程式的欄位。
我面臨的問題是找出一種有效且簡單的方法來從 CSV 鏈接回傳 CSV 標頭串列。
理想情況下,我希望串列通過 HTTP 請求回傳;或者,使用 JavaScript,這樣我就可以將它傳遞回應用程式。
例如,這是一個包含颶風計數的 CSV 檔案:https : //people.sc.fsu.edu/~jburkardt/data/csv/hurricanes.csv
標題是:
Month, "Average", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015"
我的想法是在 AWS Lambda 中運行一個 Python 腳本來獲取 CSV 標頭,然后使用 HTTP 請求將它們發送到應用程式。
是否有另一種方法可以在客戶端完成此操作,或者無需設定像 AWS Lambda 這樣的后端基礎結構?
uj5u.com熱心網友回復:
有一個流式傳輸選項requests,您可以每行處理 CSV。請參閱:正文內容作業流程
例子:
import requests
url = "https://raw.githubusercontent.com/codeforamerica/ohana-api/master/data/sample-csv/addresses.csv"
r = requests.get(url, stream=True)
for line in r.iter_lines():
header = line.decode("utf-8").split(",")
print(header)
break
這只會給你標題。我使用了來自 github 的原始 CSV 檔案示例:sample-csv
uj5u.com熱心網友回復:
“簡單”的答案顯然是下載整個檔案并使用它。但是您或許可以節省一些時間。如果檔案接受部分下載,那么您很幸運。要檢查:
import requests
requests.head("https://people.sc.fsu.edu/~jburkardt/data/csv/hurricanes.csv").headers
產量
{'Date': 'Mon, 27 Dec 2021 14:00:21 GMT',
'Server': 'Apache/2.4.46 (Fedora) OpenSSL/1.1.1g',
'Last-Modified': 'Mon, 27 Jun 2016 12:37:53 GMT',
'ETag': '"1f6-53641c9fb0a40"',
'Accept-Ranges': 'bytes',
'Content-Length': '502',
'X-Frame-Options': 'SAMEORIGIN',
'Keep-Alive': 'timeout=5, max=100',
'Connection': 'Keep-Alive',
'Content-Type': 'text/csv'}
注意Accept-Ranges: 'bytes'. 您可以詢問檔案的特定部分。大獎!
然后是使用requests和標題的問題:
resume_headers = {'Range':'bytes=0-2048'}
r = requests.get(url, stream=True, headers=resume_headers)
for chunk in r.iter_content(chunk_size=1024):
print(chunk)
輸出:
b'"Month", "Average", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015"\n"May", 0.1, 0, 0, 1, 1, 0, 0, 0, 2, 0, 0, 0 \n"Jun", 0.5, 2, 1, 1, 0, 0, 1, 1, 2, 2, 0, 1\n"Jul", 0.7, 5, 1, 1, 2, 0, 1, 3, 0, 2, 2, 1\n"Aug", 2.3, 6, 3, 2, 4, 4, 4, 7, 8, 2, 2, 3\n"Sep", 3.5, 6, 4, 7, 4, 2, 8, 5, 2, 5, 2, 5\n"Oct", 2.0, 8, 0, 1, 3, 2, 5, 1, 5, 2, 3, 0\n"Nov", 0.5, 3, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1\n"Dec", 0.0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1\n\n'
所以我們有我們的標題,還有幾行。
請注意,我列印,但您可以保存到變數、大字串、寫入本地 CSV 檔案,...任何適合您的需要。另外,我選擇了 2048 位元組的范圍和 1024 位元組的塊;適應形勢!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/394623.html
標籤:javascript Python 文件 aws-lambda http请求
上一篇:將指定位更改為0
