Python-从请求写入文件的Python循环

时间:2019-04-02 22:55:26

标签: python python-3.x api loops python-requests

我正在尝试编写一个通过请求从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)) 

2 个答案:

答案 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发行版?