Python脚本循环,为输入文件中的每一行分配时隙

时间:2015-04-24 16:01:36

标签: python python-2.7 time

我有一个Python脚本,它通过for循环运行,将urls列表作为输入。我希望能够错开/随机化 urls的序列并在1小时内运行它们。

是否可以读取文件,为每个文件分配一个值,然后启动一个计数器,一旦计数器到达时间段,它就会触发文件中该特定行的脚本?

更新

根据下面的帮助,我创建了这个脚本来测试num.txt中有一个字母列表,我在60秒而不是1小时内测试了脚本。

f = open('num.txt')
url = f.readlines()
x=random.sample(xrange(60), 60)
i=0
for u in url:
time.sleep(x[i])
print time.strftime("%H:%M:%S"), u
i+=1
time.sleep(x[i])

输出为18:25:19 a 18:26:00 b 18:26:35 c 18:27:01 d 18:27:43 e 18:27:56 f

我想要做的是随机为每个字母分配一个时间段,例如a = 44 b = 57 c = 12 d = 30 e = 22 f = 48

因此,当脚本启动时,计数器以秒为单位开始计时,一旦满足分配给每个字母的时间,它们就会在循环中运行,因此例如c将在12秒内完成循环, {22}等等e是否有意义?

2 个答案:

答案 0 :(得分:0)

来自comment

  

"我希望在1小时的随机时间内完成所有这些操作,并在达到该时间时运行"

编辑#1:

我认为你的意思是这样的,使用time.sleep()

(LocalDB)\MSSQLLocalDB

<强> 说明:

基本上,import time,random x=random.sample(xrange(3600), 3600) #create randomly ordered list of size 3600 i=0 for url in urls: time.sleep(x[i]) #sleep for a random value between (0 to 3600) i+=1 #increment 'i' by 1 time.sleep(sum(x[i:])) #sum the rest of the values 创建一个随机排序的列表,其中所有数字都在0-3600之间。然后,在for循环中,random.sample()为每次迭代获取列表的唯一值。因此,对于第一次迭代,使用列表的第一个元素,对于第二次迭代,使用第二个元素等。

然后,在执行for循环后,您可以使用带有切片表示法time.sleep()的{​​{1}}添加列表的其余值,然后使用sum()睡了剩余的时间。

编辑#2:

有关更新的示例,请尝试以下操作:

x[i:]

如果您的 num.txt 文件是这样的:

time.sleep()

此代码将输出:

import random
import time

x=random.sample(xrange(60), 60) #create randomly ordered list of 1s with size 60  

d={}  #create empty dictionary                         
i=0

with open('data.txt') as f:
    for letter in f:
        letter=letter.rstrip()
        d[letter]=x[i]    #assign timeslots to letters
        i+=1

print d    #print dictionary 

j=1
with open('data.txt') as f:
    while j<=60:
        time.sleep(1)     #sleep for one second
        for key, value in d.items():  #check if the timeslots are reached
            if value == j:
                print key, j
        j+=1

答案 1 :(得分:0)

我不确定我理解这个问题, 为什么不首先将文件加载到列表中:

with open(fname) as f:
    content = f.readlines()