我正在使用Python的外部API(特别是3.x)来基于.txt
文件中的某些关键字获取搜索结果。但是,由于在运行该脚本时每个时间间隔可以搜索多少个关键字(假设我需要每小时等待)的限制,我只能使用部分关键字(例如50个关键字)。在Python中,如何在每次迭代中仅使用一部分关键字?
假设我在.txt
文件myWords.txt
中有以下关键字列表:
Lorem #0
ipsum #1
dolor #2
sit #3
amet #4
...
vitae #167
我想使用在第一次迭代中以0-49(即前50行),在第二次迭代中为50-99,在第三次迭代中为100-149,在第四次以及最后一次为150-167中找到的关键字迭代。
当然,这可以通过读取整个文件,读取保存在其他位置的迭代计数器,然后选择位于完整列表的可迭代部分中的关键字范围来实现。但是,在我想做的事情中,我不想拥有一个外部计数器,而只拥有我的Python脚本和myWords.txt
,在Python代码本身中用于处理计数器。
我只想采用在当前脚本运行中应该使用的关键字(取决于(total number of keywords)/50
)。同时,如果我要在myWords.txt
的末尾添加任何新的关键字,它应该相应地调整迭代次数,并在需要时添加新的迭代次数。
答案 0 :(得分:2)
据我所知,没有办法在脚本的不同调用之间保留使用的关键字。但是,对于在脚本的不同调用中实现所需信息的“持久存储”,您确实有两种选择。
这是我要做的事情的实现:
创建下一个位置文件
echo 0 > next_pos.txt
现在开始工作
with open('next_pos.txt') as fh:
next_pos = int(fh.read().strip())
rows_to_search = 2 # This would be 50 in your case
keywords = list()
with open('myWords.txt') as fh:
fh.seek(next_pos)
for _ in range(rows_to_search):
keyword = fh.readline().strip()
keywords.append(keyword)
next_pos = fh.tell()
# Store cursor location in file.
with open('next_pos.txt', 'w') as fh:
fh.write(str(next_pos))
# Make your API call
# Rinse, Wash, Repeat
正如我已经说过的那样,您有很多选择,而且我不知道是否有任何一种方法比其他方法更具有Python风格,但是您要尽一切努力使它保持简单。
答案 1 :(得分:0)
尝试一下。根据需要进行修改。
$ cat foo
1
2
3
4
5
6
7
8
9
10
cat getlines.py
import sys
def getlines(filename, limit):
with open(filename, 'r') as handle:
keys = []
for idx, line in enumerate(handle):
if idx % limit == 0 and idx != 0:
yield keys
keys = []
keys.append(line.strip())
print(list(getlines('foo', 2)))
print(list(getlines('foo', 3)))
print(list(getlines('foo', 4)))