Я написал фрагмент кода, который в основном выполняет поиск и замену из списка в текстовом файле.
Итак, он отображает весь список в словарь.Затем из текстового файла каждая строка обрабатывается и сопоставляется со всем списком в словаре, если в любом месте строки найдено совпадение, она заменяется соответствующим значением из списка (словаря).
Вот код:
import sys
import re
#open file using open file mode
fp1 = open(sys.argv[1]) # Open file on read mode
lines = fp1.read().split("\n") # Create a list containing all lines
fp1.close() # Close file
fp2 = open(sys.argv[2]) # Open file on read mode
words = fp2.read().split("\n") # Create a list containing all lines
fp2.close() # Close file
word_hash = {}
for word in words:
#print(word)
if(word != ""):
tsl = word.split("\t")
word_hash[tsl[0]] = tsl[1]
#print(word_hash)
keys = word_hash.keys()
#skeys = sorted(keys, key=lambda x:x.split(" "),reverse=True)
#print(keys)
#print (skeys)
for line in lines:
if(line != ""):
for key in keys:
#my_regex = key + r"\b"
my_regex = r"([\"\( ])" + key + r"([ ,\.!\"।)])"
#print(my_regex)
if((re.search(my_regex, line, re.IGNORECASE|re.UNICODE))):
line = re.sub(my_regex, r"\1" + word_hash[key]+r"\2",line,flags=re.IGNORECASE|re.UNICODE|re.MULTILINE)
#print("iam :1",line)
if((re.search(key + r"$", line, re.IGNORECASE|re.UNICODE))):
line = re.sub(key+r"$", word_hash[key],line,flags=re.IGNORECASE|re.UNICODE|re.MULTILINE)
#print("iam :2",line)
if((re.search(r"^" + key, line, re.IGNORECASE|re.UNICODE))):
#print(line)
line = re.sub(r"^" + key, word_hash[key],line,flags=re.IGNORECASE|re.UNICODE|re.MULTILINE)
#print("iam :",line)
print(line)
else:
print(line)
Проблема здесь в том, что при увеличении размера списка выполнение замедляется, поскольку все строки текстового файла сопоставляются с каждым ключом в списке.Так, где я могу улучшить выполнение этого кода.
Список файлов:
word1 ===> replaceword1
word2 ===> replaceword2
.....
Список разделен табуляцией.Здесь я использовал ===> для простоты понимания.
Входной файл:
hello word1 I am here.
word2. how are you word1?
Ожидаемый результат:
hello replaceword1 I am here.
replaceword2. how are you replaceword1?