如何使用python“格式”按未知数量的变量创建目录

时间:2019-08-25 17:43:57

标签: python

我正在使用某些API(超过20个)抓取一些数据。现在我想根据名称输入参数来制作目录,但是不同的api将输入不同的参数。 那么我该如何使用python“ format”来制作dir或其他变量数量未知的东西

现在我们有3个API

  

第一个:

api_a = {'name': 'test_a',
        'company_status': '01',  # this will be used to dir name
        'code': 'A',   # this will be used to dir name
        'start_page' : 1,
        'per_page' : 100,
        }
  

第二个:

api_b = {'name': 'test_b',
        'business_status': '01', # this will be used to dir nam
        'start_page' : 1,
        'per_page' : 100,
        }
  

第三个:

api_c = {'name': 'test_c',
        'another_para1': 'A', # this will be used to dir nam
        'another_para2': 'B', # this will be used to dir nam
        'another_para3': 'C', # this will be used to dir nam
        'start_page' : 1,
        'per_page' : 100,
        }

  

这里是阅读api并制作目录

api_list = [api_a, api_b, api_c]

for api in api_list:

    dir_name = []

    for key, value in api.items():  # is there other more elegant way?
        if key != 'name' and key != 'start_page' and key != 'per_page' :
            dir_name.append(value)

    if not os.path.exists('../crawled_data/{api_name}/{para1}/{para2}/'.format(api_name = api['name'], para1 = dir_name[0], para2=dir_name[1])):

os.makedirs('../crawled_data/{api_name}/{para1}/{para2}'.format(api_name = api['name'], para1 = dir_name[0], para2 = dir_name[1]))

# there will be error here if the number of para not match 


我遇到麻烦了,因为它将在每个api中提供1〜3个不同的参数,并且在以python格式进行处理时会出现一些错误

2 个答案:

答案 0 :(得分:0)

似乎您知道哪些参数将用于创建每个API的路径,如果是这种情况,您可以为每个API添加格式字符串并以元组形式遍历它们

apis = [
    (api_a, '{company_status}/{code}'),
    (api_b, '{business_status}'),
    (api_c, '{another_para1}/{another_para2}/{another_para3}'),
]

for api, format_string in apis:
    dir_name = format_string.format(api)

编辑:

我不知道您是否可以保证响应中键的顺序,因此当我们创建键生成器时,我们对键进行排序,以使它们始终保持相同的顺序。一旦有了键,我们就可以用斜杠将这些键的所有值连接起来

excluded_fields = ('name', 'start_page', 'per_page')
keys = (k for k in sorted(api.keys()) if k not in excluded_fields)
dir_name = '/'.join(api[key] for key in keys):

答案 1 :(得分:0)

您可以使用“ os”库来代替python格式,

api_list = [api_1, api_2, api_3]
const_path = '../crawled_data/' 
for api in api_list:
    path = const_path + os.path.join(api.values())
    if not os.path.exists(path):
        os.mkdir(path)