Как постоянно добавлять +1 к счетчику? - PullRequest
0 голосов
/ 12 марта 2020

Это может быть глупый вопрос, но здесь ничего не происходит:

мой счетчик начинается с 2821614688517316738.

Как добавить 1 к каждому для каждой итерации?

counter = 2821614688517316738
counter += 1
print(counter)

вывод:

2821614688517316739
2821614688517316739
2821614688517316739

Как добавить 1 к нему непрерывно, а не возвращать обратно к исходному номеру счетчика?

Некоторые из вас просили полный код, вот он.

Краткое объяснение Имеется 3954 документа, через которые он проходит. Он подключается к API, который требует счетчика +1 для каждой итерации или запроса, отправляемого в API.

from bs4 import BeautifulSoup
import xml.etree.ElementTree as ET
import glob
import os
import hashlib 
import hmac 
import requests 
import json
import pandas as pd
from pandas.io.json import json_normalize


path = "/Users/User/Downloads/Thesis papers/links/"
for filename in glob.glob(os.path.join(path, "*")):
    with open(filename) as open_file:
        content = open_file.read()

    bs = BeautifulSoup(content, "xml")
    for individual_xml in bs.find_all("Response"):
        for link in individual_xml.find_all("Fields"):
            for fields in link.find_all("Field"):
                word = "Earnings Call"
                if word in fields["value"]:

                    for i in link.find_all("Field", {"id":"7011"}):
                        #print(fields)
                        #print(i["value"][0])


                        #Your FactSet Information  
                        key = ' *' #Insert Key from auth-factset.com 
                        keyId = '*' #Insert KeyID from auth-factset.com 
                        username = '*'  #Insert your FactSet Username provided by your FactSet Account team 
                        serial = '*' #Insert Serial Number tied to machine account provided by your FactSet Account 
                        counter = 2821614688517316742
                        for gg in range(counter):
                            counter += 1
                            print(counter)
                            ba_key = bytearray.fromhex(key) 
                            my_int = counter.to_bytes(8, 'big', signed=True) 
                            my_hmac = hmac.new(ba_key,msg=my_int, digestmod=hashlib.sha512) 
                            digested_counter = my_hmac.digest() 
                            otp = digested_counter.hex()
                            json_object = {     
                                    'username': username,     
                                    'keyId': keyId,     
                                    'otp': otp ,     
                                    'serial': serial 
                                    }
                            OTP_url = 'https://auth.factset.com/fetchotpv1' 
                            payload = json.dumps(json_object) 
                            header = {'Content-Type': 'application/json'} 
                            r = requests.post(OTP_url, data=payload)   
                            r_key = r.headers.get(key='X-DataDirect-Request-Key')
                            r_token = r.headers.get(key='X-Fds-Auth-Token') 
                            print('DataDirect Request Key: ', r_key) 
                            print('Token:', r_token) 
                            #Confirm authentication and session token work 
                            header = {'X-Fds-Auth-Token':r_token}  
                            Service_url = 'https://datadirect.factset.com/services/auth-test'
                            r = requests.get(Service_url,headers=header) 
                            url = i["value"]
                            r = requests.get(url,headers=header)
                              #bs = BeautifulSoup(r, "xml")

                            #print(r.text)
                            with open(''+fields["value"]+''+'.xml', 'w') as f:
                                f.write(r.text)

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

простой ответ:

counter = 2821614688517316740
while True:
    counter += 1
    print(counter)

просто знайте, что это бесконечное l oop ...

РЕДАКТИРОВАТЬ

Я знаю точное количество требуемых итераций, это 3954, можем ли мы как-то установить это ограничение? -

Конечно.

counter = 2821614688517316740
for _ in range(3954):
    counter += 1
    print(counter)

Теперь я могу любезно предложить вам пройти полное официальное Python руководство ?

0 голосов
/ 12 марта 2020

Он будет перебирать счетчик и добавлять в него число

counter = 2821614688517316738
for i in range(3954):
    counter += 1
    print(counter)
...