每个运行的变量之间交替

时间:2017-04-23 18:19:42

标签: python python-2.7

我想在每次运行程序时使用不同的API密钥进行数据抓取。

例如,我有以下2个键:

apiKey1 = "123abc"
apiKey2 = "345def"

以及以下网址:

myUrl = http://myurl.com/key=...

运行程序时,我希望myUrl使用apiKey1。一旦再次运行,我就会喜欢使用apiKey2等等......即:

首次运行:

url = "http://myurl.com/key=" + apiKey1

第二次运行:

url = "http://myurl.com/key=" + apiKey2

很抱歉,如果这没有意义,但有没有人知道这样做的方法?我不知道。

编辑:

为避免混淆,我查看了 this 的答案。但这不符合我的疑问。我的目标是在我的脚本执行之间循环变换。

3 个答案:

答案 0 :(得分:2)

我会使用持久字典(它就像数据库,但更轻量级)。这样,您可以轻松存储选项和下一个访问的选项。

标准库中已经有一个提供这种持久字典的库:shelve

import shelve

filename = 'target.shelve'

def get_next_target():
    with shelve.open(filename) as db:
        if not db:
            # Not created yet, initialize it:
            db['current'] = 0
            db['options'] = ["123abc", "345def"]

        # Get the current option
        nxt = db['options'][db['current']]
        db['current'] = (db['current'] + 1) % len(db['options'])  # increment with wraparound

    return nxt

每次调用get_next_target()都会返回下一个选项 - 无论你是在同一次执行中多次调用它还是每次执行一次。

如果您从不拥有超过2个选项,则可以简化逻辑:

db['current'] = 0 if db['current'] == 1 else 1

但我认为有一种方法可以轻松处理多种选择。

答案 1 :(得分:1)

如果不存在此类文件,以下是如何使用自动文件创建的示例:

import os
if not os.path.exists('Checker.txt'):
    '''here you check whether the file exists
    if not this bit creates it
    if file exists nothing happens'''
    with open('Checker.txt', 'w') as f:
        #so if the file doesn't exist this will create it
        f.write('0')

myUrl = 'http://myurl.com/key='
apiKeys = ["123abc", "345def"]

with open('Checker.txt', 'r') as f:
    data = int(f.read()) #read the contents of data and turn it into int
    myUrl = myUrl + apiKeys[data] #call the apiKey via index

with open('Checker.txt', 'w') as f:
    #rewriting the file and swapping values
    if data == 1:
        f.write('0')
    else:
        f.write('1')

答案 2 :(得分:0)

我会依赖外部进程来保存上次使用的密钥, 甚至更简单我会计算脚本的执行情况,如果执行计数是奇数,则使用密钥,或者使用偶数的其他密钥。

所以我会介绍像redis这样的东西,这对你可能希望在项目中添加的其他(未来?)功能也有很大帮助。 redis是那些总能带来好处而且几乎没有任何成本的工具之一,能够依赖外部永久存储非常实用 - 它可以用于多种用途。

所以我会这样做:

  1. 首先确保redis-server正在运行(可以作为守护程序自动启动,取决于您的系统)
  2. 安装Python redis模块
  3. 然后,这里有一些Python代码的灵感:
  4. 
        import redis
    
        db = redis.Redis()
    
        if db.hincrby('execution', 'count', 1) % 2:
          key = apiKey1
        else:
          key = apiKey2 
    
        
    

    那就是它!