【问题标题】:How to access information from config.json file to a python file?如何从 config.json 文件访问信息到 python 文件?
【发布时间】:2020-01-13 06:11:34
【问题描述】:

问题是我无法从 config.json 文件访问我的 python 文件中的信息 我在下面提供了 JSON 数据和 python 代码 我已经尝试了请求模块中的所有内容 但是我可以在没有配置文件的情况下访问响应但是, 我需要配置文件 下面是一个json文件

{
    "api_data": {
        "request_url": "https://newapi.zivame.com/api/v1/catalog/list",
        "post_data" : {"category_ids" : "948",
                        "limit" : "10000"},
        "my_headers":{"Content-Type": "application/json"}
    },
    "redshift":{
        "host":"XXX.XXXX.XXX",
        "user":"XXXX",
        "password":"XXXXXXXX",
        "port": 8080,
        "db":"XXXX"
    },
    "s3":{
        "access_key":"XXXXXXXXX",
        "secret_key":"XXXXXXXXXX",
        "region":"XX-XXXXX-1",
        "path":"XXXXXXXXXXXX/XXX",
        "table":"XXXXXX",
        "bucket":"XXXX",
        "file": "XXXXXX",
        "copy_column": "XXX",
        "local_path": "XXXXX"
    },
    "csv_file": {
        "promo_zivame": ""
    }
}

这就是程序

#!/usr/bin/python                                                                                                                                                                 
import json                                                                                                                                                                       
import psycopg2                                                                                                                                                                   
import requests                                                                                                                                                                   
import os

BASE_PATH = os.path.dirname(os.path.realpath(__file__))

with open(BASE_PATH+'/config.json') as json_data_file:                                                                                                                            
    data = json.load(json_data_file)

#api_config = data['api_data']                                                                                                                                                    
#redshift = data['redshift']                                                                                                                                                      
s3_config = data['s3']

#x = print(api_config.get('request_url'))

class ApiResponse:                                                                                                                                                                
    #api response                                                                                                                                                                 
    def api_data(self, api_config):                                                                                                                                               
        print("starting api_data")                                                                                                                                                
        try:                                                                                                                                                                      
            self.ApiResponse = requests.post(api_config['request_url'], api_config['post_data'], api_config['my_headers'])                                                        
            data_1 = self.ApiResponse                                                                                                                                             
            #data = json.dump(self.ApiResponse)                                                                                                                                   
            print("API Result Response")                                                                                                                                          
            print(())                                                                                                                                                             
            print(self.ApiResponse)                                                                                                                                               
            return (self.ApiResponse)

        except Exception:                                                                                                                                                         
            print("response not found")                                                                                                                                           
            return False

    def redshift_connect(self, redshift):                                                                                                                                         
        try:                                                                                                                                                                      
            # Amazon Redshift connect string                                                                                                                                      
            self.con = psycopg2.connect(                                                                                                                                          
                host=redshift['host'],                                                                                                                                            
                user=redshift['user'],                                                                                                                                            
                port=redshift['port'],                                                                                                                                            
                password=redshift['password'],                                                                                                                                    
                dbname=redshift['db'])                                                                                                                                            
            print(self.con)                                                                                                                                                       
            return self.con                                                                                                                                                       
        except Exception:                                                                                                                                                         
            print("Error in Redshift connection")                                                                                                                                 
            return False                                                                                                                                                          
def main():                                                                                                                                                                       
    c1 = ApiResponse()                                                                                                                                                                   
    api_config = data['api_data']                                                                                                                                                 
    redshift = data['redshift']                                                                                                                                                   
    c1.api_data(api_config)                                                                                                                                                       
    c1.api_data(data)                                                                                                                                                             
    c1.redshift_connect(redshift)

if __name__=='__main__':                                                                                                                                                          
    main()

【问题讨论】:

  • json 加载的东西很好......但是什么是“c1 = data()”?
  • 嗨 @MikeGuelfi 哦,对不起,它的错误 c1=ApiResponse()
  • 嗨@MikeGuelfi 即使改变它也不起作用
  • 有错误信息吗?什么不完全工作? data 为空?请提供更多信息
  • 试试requests.post(api_config['request_url'], json=api_config['post_data'], headers=api_config['my_headers'])。注意关键字jsonheaders

标签: python json python-3.x class python-requests


【解决方案1】:

requests.post() 的第三个参数是 json。要提供headers,您需要按照@JustinEzequiel 的建议明确使用参数的名称。在此处查看请求文档:2.python-requests.org/en/v1.1.0/user/quickstart/#custom-headers

requests.post(api_config['request_url'], json=api_config['post_data'], headers=api_config['my_headers'])

【讨论】:

  • +1 是的,先生,我已经看到了,但是由于数据量很大,我需要时间,可以将响应 json 存储在变量中然后传递它吗?
  • 嗯,我不确定。你的意思是api_config['post_data'] 太大而导致超时?您最好将其作为一个单独的新问题提出
  • 好的先生,我也有一个问题,你能帮忙吗?喜欢它的基本功能,但我正在学习,就像我已经将响应正文传递给另一个程序一样,我现在将再问一个问题,请进行审查并做必要的事情
  • 我无法再发布一个问题,您能否提供您的链接或其他内容,以便我可以给您发短信!
【解决方案2】:

https://stackoverflow.com/a/16696317/5386938借代码

import requests

api_config = {
    "request_url": "https://newapi.zivame.com/api/v1/catalog/list",
    "post_data" : {"category_ids" : "948", "limit" : "10000"},
    "my_headers":{"Content-Type": "application/json"}
    }
local_filename = 'the_response.json'
with requests.post(api_config['request_url'], json=api_config['post_data'], headers=api_config['my_headers'], stream=True) as r:
    r.raise_for_status()
    with open(local_filename, 'wb') as f:
        for chunk in r.iter_content(chunk_size=8192): 
            if chunk: # filter out keep-alive new chunks
                f.write(chunk)

将响应保存到文件 ('the_response.json') 中,然后您可以传递。注意stream=True 传递给requests.post

【讨论】:

  • 谢谢您,先生,@JustinEzequiel 您知道如何将变量从类函数中的 try 块变量访问到另一个文件中
  • 以及我使用 json 文件的原因,因为我需要它是安全的,因此有一个后续程序
猜你喜欢
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多