Python-如何检查是否使用了来自文件的名称?

Python-如何检查是否使用了来自文件的名称?,python,python-2.7,web-scraping,Python,Python 2.7,Web Scraping,我有一个小的剪贴脚本。我有2000个名字的文件,我用这些名字在YouTube上搜索视频ID。因为获取所有ID需要相当长的时间,所以我不能一次完成。我想要的是找到我最后一次刮伤的地方,然后从那个位置开始。最好的方法是什么?我在考虑把用过的名字添加到列表中,然后检查它是否在列表中,如果没有,开始刮,但也许有更好的方法来做到这一点?(我希望是的) 从文件中获取名称和刮取ID的部件。我想要的是,当我退出刮片时,下次启动刮片时,它不会从开始运行,而是从上次结束的位置运行: index = 0 for na

我有一个小的剪贴脚本。我有2000个名字的文件,我用这些名字在YouTube上搜索视频ID。因为获取所有ID需要相当长的时间,所以我不能一次完成。我想要的是找到我最后一次刮伤的地方,然后从那个位置开始。最好的方法是什么?我在考虑把用过的名字添加到列表中,然后检查它是否在列表中,如果没有,开始刮,但也许有更好的方法来做到这一点?(我希望是的)

从文件中获取名称和刮取ID的部件。我想要的是,当我退出刮片时,下次启动刮片时,它不会从开始运行,而是从上次结束的位置运行:

index = 0
for name in itertools.islice(f, index, None):
    parameters = {'key': api_key, 'q': name}
    request_url = requests.get('https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=1&type=video&fields=items%2Fid', params = parameters)
    videoid = json.loads(request_url.text)
    if 'error' in videoid:
        pass
    else:
        index += 1
        id_file.write(videoid['items'][0]['id']['videoId'] + '\n')
        print videoid['items'][0]['id']['videoId']

您可以只记住最后一个刮取条目的索引号。每次刮除一个条目后,增加一个计数器,然后假设文本文件中的条目不改变顺序,只需在该数字处重新拾取?

这里最简单的答案可能是mitim的答案。只需保留一个文件,在每行之后用最后处理的索引重写即可。例如:

savepath = os.path.expanduser('~/.myprogram.lines') 
skiplines = 0
try:
    with open(savepath) as f:
        skiplines = int(f.read())
except:
    pass
with open('names.txt') as f:
    for linenumber, line in itertools.islice(enumerate(f), skiplines, None):
        do_stuff(line)
        with open(savepath, 'w') as f:
            f.write(str(linenumber))
然而,您还有其他方法可以做到这一点,这可能对您的用例更有意义

例如,可以在处理每个名称后重写“名称”文件,以删除第一行。或者,最好将列表预处理到一个
anydbm
(甚至
sqlite3
)数据库中,这样,一旦完成,您就可以更轻松地删除(或标记)名称


或者,如果您可能针对不同的文件运行,并且需要为每个文件保持进度,您可以为每个文件存储一个单独的
.line
文件(可能位于
~/.myprogram
目录中,而不是淹没顶级主目录),或者使用
anydbm
将路径名映射到行完成。

我正在运行一个循环以从文件中获取名称。我怎样才能在循环中回到通缉线?我知道如何获取索引,但不知道如何返回。你能给我举个例子吗?@user1628593:要跳过文件中的前n行,只需对itertools.islice(f,n,None)中的行执行
,而不是对f:
中的行执行
。哇,我真的需要记住itertools,比我跳过文件中的行要好得多。看起来它并没有添加文件中已经存在的刮取ID,但它仍然从文件名开始。我将用当前代码编辑第一篇文章。