如何在python中更新循环内部的变量



我正试图从一个不知道偏移量的api中获取数据。因此,我必须迭代,直到数据不为空,并且在每个偏移量中都有10条记录,因此增加10将是下一个10条记录。

2.由于数据很大,我想在不同的文件中写入数据。为此,我希望在每500个偏移量之后,它将数据写入下一个文件。如果我总共有1300个偏移量,我希望它将0-500写入file1510-1000到文件21010-1350到文件3

i=0
data = ''
while data != ',': 
url = test.api?offset{i}
response=requests.get(url)
data=response.text
data+=data
if i%500==0:
fo=open("sample.txt")
fo.write(data)
i+=10

试试这个:

i = 0
data = ''
j = 1
while data !=',':
if i%500==0:
with open(f"file{j}.txt", "w") as fo:
fo.write(data)
j += 1
data = ''
url = f"test.api?offset{i}"
response = requests.get(url)
data += response.text
i+=10
if data != '':
with open(f"file{j}.txt", "w") as fo:
fo.write(data)

基本上,我创建了另一个变量j来跟踪文件名,每次写入文件后,数据变量都会重置为空字符串。同样像D.L提到的,使用with关键字将允许文件在写入后自动关闭,从而产生更干净的语法。此外,我假设您正在使用Python3进行开发,所以我使用了f-string语法。

根据我所能收集到的信息,我认为不应该在每次迭代时都分配数据变量,然后将其添加到自身中,因为这会导致从当前迭代的get请求中获得的数据重复,而不会保留所有先前迭代的get请求中的数据。我想你会想继续添加更多的数据,直到偏移量达到500的倍数,所以这就是我试图做的

import requests
i: int = 0
data: str = ""
while payload != ",":
url: str = f"test.api?offset{i}"
response: requests.Response = requests.get(url)
payload: str = response.text
data += payload
if i != 0 and i % 500 == 0:
with open(f"offset_{i-500}-{i}.txt", "w+") as f:
f.write(data)
data = ""
i += 10

一个符合python约定的解决方案,

另外,您需要验证i != 0,因为0 % 500 == 0将导致True

最新更新