fbpx

Как перемешивать только выбранные слова в тексте (python)?

221 просмотра
0
0 Комментариев

Здравствуйте!
Необходимо найти и перемешать в тексте некоторые слова, например, hash и code, причём этих слов в тексте много. Как понимаю, сначала нужен ввод файла open(«infile.txt»,’r’), потом поиск избранных слов, объединение их в некий массив, перемешивание этого массива с помощью random.shuffle, запись этого массива на исходные местоположения в тексте и запись файла, наконец. Помогите связать все элементы!

Спасибо ReinRaus ♦ и vinger4! Задача решена! Я добавил ввод-вывод файла для удобства.

   import re, random
 
regex= re.compile('hash|code') # что ищем
with open("C:\infile.txt",'r') as f:
    lines = f.read()
endpos=0
match= regex.search(lines,endpos)
matches=[] # массив с совпадениями
strings=[] # все остальное что не совпало, при этом если два совпадения подряд, или начало (конец) строки и совпадение, то в этот массив попадает пустая строка
    # поэтому значения в массивах чередуются относительно целевой строки
while (match):
 strings+= [ lines[endpos:match.start()] ]
 endpos= match.end()
 matches+=[match.group(0)]
 match= regex.search(lines,endpos)
if (endpos==len(lines)): strings+= [ "" ]
random.shuffle(matches)
 
result= "" # собираем строку обратно с перемешанными данными
for i in range(len(matches)):
 result+=strings[i]+matches[i]
result+=strings[-1]
 
with open("C:\Python27\outfile.txt", "w") as f:
    f.write(result)


Добавить комментарий

1 Ответы

Python Опубликовано 15.06.2019
0

какие ошибки при компиляции? пока вижу следующее:

import re
import random
f = open('infile.txt','r').read()
words = ['hash' , 'code'] # в следующей строке переменной будет присвоено другое значение - зачем тогда она тут?
for words in f:
    n = re.search(words) # ищем слова в строке?
    random.shuffle(n) # там же их перемешиваем? а если оно одно? наверное лучше сложить в отдельный словарь типа "индекс - слово"
 
with open("outfile.txt", "w") as f:
    f.writelines(lines) # какое значение у переменной lines?

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up