【问题标题】:Searching in a big list file for names using in operator in python在 python 中使用 in 运算符在大列表文件中搜索名称
【发布时间】:2014-05-09 15:48:55
【问题描述】:

我从 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 循环,它应该检查其中一个电影名称是否出现在我的电影列表中,如果出现,它也应该将它附加到一个名为 Genrelist 的新列表中。

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

到目前为止,我尝试过:

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

但在这里它只会在列表名称中找到姓氏。因此,假设它使用我粘贴的示例进行搜索,我只会找到包含 --> 'Pulp Fiction (1994) 的所有内容,而不是其余内容?

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

【问题讨论】:

  • 你的电影名字后面有\n吗?
  • 您能否提供更多信息-GenreMod.list 的内容是什么? names 是电影列表(您之前称为 movie)吗?你想要什么确切的输出?
  • 尝试在大文件中使用xreadlines 而不是readlines

标签: python list file python-2.7


【解决方案1】:

您需要保持写入文件打开。您的文件仅写入最后一个循环实例。

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

没关系,您创建的是列表而不是文件。这里的 Python 技能很差

【讨论】:

  • 一定要爱你,而拆分 \n 完成了这项工作 ;)
【解决方案2】:

您可以使用列表推导。

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”)。

【讨论】:

    猜你喜欢
    • 2012-05-15
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多