У меня есть файл словаря, который содержит слово в каждой строке.Замена строки с использованием словаря в python
названия-sorted.txt
a&a
a&b
a&c_bus
a&e
a&f
a&m
....
Для каждого слова, его номер строки идентификатор слова.
Тогда у меня есть другой файл, содержащий набор слов, разделенных вкладкой в каждой строке.
a.txt
a_15 a_15_highway_(sri_lanka) a_15_motorway a_15_motorway_(germany) a_15_road_(sri_lanka)
Я хотел бы заменить все слова по идентификатору, если он существует в словаре, так что результат выглядит,
3454 2345 123 5436 322 ....
Так что я написал такая питон код, чтобы сделать это:
f = open("titles-sorted.txt")
lines = f.readlines()
titlemap = {}
nr = 1
for l in lines:
l = l.replace("\n", "")
titlemap[l.lower()] = nr
nr+=1
fw = open("a.index", "w")
f = open("a.txt")
lines = f.readlines()
for l in lines:
tokens = l.split("\t")
if tokens[0] in titlemap.keys():
fw.write(str(titlemap[tokens[0]]) + "\t")
for t in tokens[1:]:
if t in titlemap.keys():
fw.write(str(titlemap[t]) + "\t")
fw.write("\n")
fw.close()
f.close()
Но этот код невероятно медленно, так что это делает меня подозрительным, если я сделал накануне Правильно.
Это эффективный способ сделать это?
Сколько ключей есть, а затем сколько слов вы заменяете? – SirParselot
одно дело в том, что вы вызываете 'readlines', вам это не нужно, и в зависимости от используемой версии python это может привести к немедленному чтению всего файла, что необязательно. вы можете просто использовать 'for l in f:' – njzk2
Считаете ли вы использование потоков и рабочих? Должен ускорить его в разном количестве рабочих потоков. Обратите внимание: это не должно восприниматься как комментарий к алгоритму. Просто заявление о том, что больше работников делает для более быстрого завершения. – earnshae