我正在使用某些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格式进行处理时会出现一些错误
答案 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)