我正在尝试编写一个通过请求从URL获取.json的循环,然后将.json写入.csv文件。然后我需要一遍又一遍,直到我的名字列表(.txt文件)完成(89行)。我不能让它遍历列表,它只是选择列表的底名然后退出。我需要它来完成并使用正确的URL基本上创建89个文件。其他功能正常运行,但只执行一次。
我似乎找不到适合自己目的的循环。由于我是python的初学者,我希望我可以在这里获得一些帮助并了解更多信息。
#Opens the file with pricelists
with open('prislistor.txt', 'r') as f:
for i, line in enumerate(f):
pricelists = (line.strip())
response = requests.get('https://api.example.com/3/prices/sublist/{}/'.format(pricelists), headers=headers)
#Formats it
parsed = json.loads(response.text)
listan=(json.dumps(parsed, indent=4, sort_keys=True))
#Converts and creates a .csv file.
data = parsed['Prices']
with open('listan-{}.csv'.format(pricelists), 'w') as outf:
dw = csv.DictWriter(outf, data[0].keys())
dw.writeheader()
for row in data:
dw.writerow(row)
print ("The file list-{}.csv is created!".format(pricelists))
答案 0 :(得分:0)
您似乎只是从其中一个响应中获取数据。您可能想跟踪所有这些信息。您可以通过将每个响应附加到列表,分别解析每个响应,然后将其数据添加到输出中来实现。像这样:
#Opens the file with pricelists
pricelists = []
with open('prislistor.txt', 'r') as f:
for i, line in enumerate(f):
pricelists.append(line.strip())
# build responses
responses = []
for pricelist in pricelists:
response.append(requests.get('https://api.example.com/3/prices/sublist/{}/'.format(pricelist), headers=headers))
#Format each response
fullData = []
for response in responses:
parsed = json.loads(response.text)
listan=(json.dumps(parsed, indent=4, sort_keys=True))
#Converts and creates a .csv file.
fullData.append(parsed['Prices'])
with open('listan-{}.csv'.format(pricelists), 'w') as outf:
dw.writeheader()
for data in fullData:
dw = csv.DictWriter(outf, data[0].keys())
for row in data:
dw.writerow(row)
print ("The file list-{}.csv is created!".format(pricelists))
答案 1 :(得分:0)
我通过导入响应解决了我在评论中发布的第一个错误,但是现在我遇到了这个错误。
AttributeError: module 'response' has no attribute 'append'
我需要导入更多库吗?
编辑:我认为,由于尚未定义“响应”,因此将“响应”更改为“响应”似乎更正确。但更改后,我又遇到了另一个错误:
with open('listan-{}.csv'.format(pricelists), 'w') as outf:
OSError: [Errno 22] Invalid argument: "listan-['A..
这是操作系统错误,因为我正在使用Windows 10,是否应该切换到Linux发行版?