我有以下python脚本,我想从两个迭代器中取值。
filename = "small"
with open(filename,'r') as plot_data:
main_dict = dict()
line_one = itertools.islice(plot_data, 0, None, 4)
line_two = itertools.islice(plot_data, 2, None, 4)
dictionary = defaultdict(list)
#take values from iterators alternatively.
for movie_name, movie_plot in itertools.izip(line_one, line_two):
movie_plot = movie_plot.lower()
words = re.findall(r'\w+', movie_plot, flags = re.UNICODE | re.LOCALE)
elemStopW = filter(lambda x: x not in stopwords.words('english'), words)
#list of words.
print elemStopW
for word in elemStopW:
word = PorterStemmer().stem_word(word)
dictionary[movie_name].append(word)
main_dict[word] = len(main_dict)
print main_dict
此脚本不打印任何内容。我不懂为什么。我不想合并迭代器,因为我想在同一个循环中使用这两个值。
任何帮助表示感谢。
编辑:避免一些许可(如评论中所述)。以下脚本正常工作
filename = "small"
with open(filename,'r') as plot_data:
main_dict = dict()
line_one = itertools.islice(plot_data, 0, None, 4)
dictionary = defaultdict(list)
for movie_name in line_one:
print movie_name
答案 0 :(得分:2)
这可能不会达到预期目的:
line_one = itertools.islice(plot_data, 0, None, 4)
line_two = itertools.islice(plot_data, 2, None, 4)
由于plot_data
是一个文件对象,因此从迭代器中读取将使文件前进 - 它仍将按顺序读取,而不是并行读取两次。
您可以使用itertools.tee
复制文件迭代器,以便可以并行读取两次:
plot1, plot2 = itertools.tee(plot_data, 2)
line_one = itertools.islice(plot1, 0, None, 4)
line_two = itertools.islice(plot2, 2, None, 4)
请注意,如果两个迭代器的位置彼此远离,这可能会占用大量内存,最好打开文件两次。在这种情况下,这应该不是问题。