使用python和AWS Lambd向csv文件添加头文件

2024-09-19 23:40:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在试图找到一种方法,使用AWS lambda函数将头添加到csv文件中。实际的文件包含敏感信息,所以我一直在玩一个来自互联网的csv样本。我不能使用熊猫,因为我们还没有设置该层,所以我只能使用'requests'和'csv'。你知道吗

基本get请求获取数据:

 import boto3
 import os
 import requests
 from base64 import b64decode
 import botocore
 import csv 
 import json 
 import fileinput

 def lambda_handler(event, context):
     url = 'http://winterolympicsmedals.com/medals.csv'
     query = requests.get(url)
     print (query.text)

结果:

 Response:
 null

 Request ID:
 "2c17f3a7-e00f-4301-a647-51a66e755b17"

 Function Logs:
 1998,Nagano,Bobsleigh,Bobsleigh,GBR,four-man,M,Bronze
 1998,Nagano,Biathlon,Biathlon,GER,15km,W,Bronze
 1998,Nagano,Biathlon,Biathlon,GER,4x7.5km relay,M,Gold
 1998,Nagano,Biathlon,Biathlon,GER,4x7.5km relay,W,Gold
 1998,Nagano,Biathlon,Biathlon,GER,7.5km,W,Bronze

到目前为止,我掌握的情况如下:

 import boto3
 import os
 import requests
 from base64 import b64decode
 import botocore
 import csv 
 import json 

 def lambda_handler(event, context):

     url = 'http://winterolympicsmedals.com/medals.csv'

     query = requests.get(url)

     with open('/tmp/medals.csv', 'w+', newline='') as f:
         r = csv.reader(f)
         data = [line for line in r]

     with open('/tmp/medals.csv','w',newline='') as f:
         w = csv.writer(f)
         w.writerow(['user', 'first', 'last', 'email', 'local', 'membership', 'login'])
         w.writerows(data)
         return f

在许多不同的错误中,我放弃了这个:

  Response:
 {
   "errorMessage": "Unable to marshal response: <_io.TextIOWrapper name='/tmp/medals.csv' mode='w' encoding='UTF-8'> is not JSON serializable",
   "errorType": "Runtime.MarshalError"
 }

感谢您的帮助。你知道吗


Tags: 文件csvlambdaimporturlgetqueryrequests
1条回答
网友
1楼 · 发布于 2024-09-19 23:40:57

给你。其思想是读取csv并使用逗号分隔符将其列为一个列表。然后使用write rows来写入整行。我不得不删除列表的第一个元素来删除现有的标题。你知道吗

import boto3
import os
import requests
from base64 import b64decode
import botocore
import csv
import json

def lambda_handler(event, context):

  url = 'http://winterolympicsmedals.com/medals.csv'

  with requests.Session() as s:
      download = s.get(url)

      decoded_content = download.content.decode('utf-8')

      cr = csv.reader(decoded_content.splitlines(), delimiter=',')
      my_list = list(cr)

      with open('/tmp/medals.csv', 'w', newline='') as f:
        w = csv.writer(f)
        w.writerow(['user', 'first', 'last', 'email', 'local', 'membership', 'login'])
        # delete the existing header
        del my_list[0]
        w.writerows(my_list)

希望这有帮助

相关问题 更多 >