在python中使用in运算符在大列表文件中搜索名称

时间:2014-05-09 15:48:55

标签: python list file python-2.7

我从imdb下载了一个包含电影类型的大文件。该文件非常大,如果我尝试从文件中打印出所有内容,我的超级计算机就会崩溃。

好吧,我需要在某些电影上播放一些类型。为了完成这一点,我在python中创建了一个名为movie的列表。

此列表包含相同字符串中包含年份的电影名称。你可以在这里看到一个例子。

['The Shawshank Redemption (1994)\n',
 'The Godfather (1972)\n',
 'The Godfather: Part II (1974)\n',
 'The Dark Knight (2008)\n',
 'Pulp Fiction (1994)\n',

我必须为大文件中的每一行制作一些for循环,它应检查其中一个movienames是否出现在我的电影列表中,如果是,它应该附加一个名为genrelist的新列表。 / p>

所以结果将是一个包含电影名称的新列表,包括他们的流派;)

我到目前为止尝试过:

filegenre = open("GenreMod.list", "r")
lines = filegenre.readlines()

for line in lines:
    for item in names:
        if item in line:
            genrelist.append(line)

print genrelist

但是在这里它只会在列表名称中找到姓氏。所以,如果它用我粘贴的例子进行搜索,我将只找到包含 - >的所有内容。 '低俗小说(1994),但不是其余的?

我做了一些错误代码或`?

2 个答案:

答案 0 :(得分:0)

您需要保持写文件处于打开状态。您的文件只写了最后一个循环实例。

with open("genrelist.ext", "w"):
    #do stuff

没关系,你正在创建一个列表而不是一个文件。这里的Python技能很差

答案 1 :(得分:0)

您可以使用列表理解。

item = "Pulp Fiction"
with open("GenreMod.list", "r") as filegenre:
  print [line.strip() for line in filegenre if item in line]

如果文件在文本模式下打开(现在是什么),那么迭代文件描述符将逐行返回。

列表理解将遍历这些行,仅考虑那些拥有item in line的人,并将结果列表中的项目值分配给带有删除空格的原始行(有效删除" \ n" )。