2013-08-20 5 views
2

У меня есть txt-файл (myText.txt), содержащий много строк текста.Удалить некоторые слова, заменив некоторые слова из txt-файла

Я хотел бы знать:

  • Как создать список слов, которые должны быть удалены (Я хочу, чтобы настроить слова сам)
  • Как создать список слов что необходимо заменить

например, если myText.txt является:

The ancient Romans influenced countries and civilizations in the following centuries. 
Their language, Latin, became the basis for many other European languages. They stayed in Roma for 3 month. 
  • Я хотел бы удалить «» «и» «в» Я хотел бы заменить «древний» от «старого»
  • Я хотел бы заменить «месяц» и «века» на «года "

ответ

3

Вы всегда можете использовать регулярное выражение:

import re 

st='''\ 
The ancient Romans influenced countries and civilizations in the following centuries. 
Their language, Latin, became the basis for many other European languages. They stayed in Roma for 3 month.''' 

deletions=('and','in','the') 
repl={"ancient": "old", "month":"years", "centuries":"years"} 

tgt='|'.join(r'\b{}\b'.format(e) for e in deletions) 
st=re.sub(tgt,'',st) 
for word in repl: 
    tgt=r'\b{}\b'.format(word) 
    st=re.sub(tgt,repl[word],st) 


print st 
+0

привет очень приятная работа. Иногда у меня в тексте есть знак «+» и «-». Однако кажется, что Python не принимает удаления = ('и', 'in', 'the', '+', '-') Есть ли специальный способ ввода этих символов? Спасибо – S12000

+0

Есть определенные символы, которые имеют смысл для регулярного выражения, например '+' и '-'. Мое предложение посвящено некоторому времени с учебным сайтом регулярных выражений и изучению этих символов. [Regex101] (http://www.regex101.com) является хорошим. – dawg

2

Это должно сделать трюк. Вы используете список для хранения объектов, которые хотите удалить, а затем прокрутите список и удалите каждый элемент в списке из строки содержимого. Затем вы используете словарь для хранения слов, которые у вас есть, и слова, которые вы хотите их заменить. Вы также перебираете те и заменяете текущие слова на замещающие.

def replace(): 
    contents = "" 
    deleteWords = ["the ", "and ", "in "] 
    replaceWords = {"ancient": "old", "month":"years", "centuries":"years"} 

    with open("meText.txt") as f: 
    contents = f.read() 
    for word in deleteWords: 
    contents = contents.replace(word,"") 

    for key, value in replaceWords.iteritems(): 
    contents = contents.replace(key, value) 
    return contents 
+0

Благодарим за помощь. Я просто получаю сообщение об ошибке «AttributeError:« dict »объект не имеет атрибута« iteritems »« Я только последняя версия Python. Это нормально? Спасибо. – S12000

+0

Если вы используете python 3, скажите replaceWords.items() –

+0

Спасибо, что он работает как шарм. – S12000

2

Используйте список для удаления и словаря для замены. Это должно выглядеть примерно так:

def processTextFile(filename_in, filename_out, delWords, repWords): 


    with open(filename_in, "r") as sourcefile: 
     for line in sourcefile: 
      for item in delWords: 
       line = line.replace(item, "") 
      for key,value in repWords.items(): 
       line = line.replace(key,value) 

      with open(filename_out, "a") as outfile: 
       outfile.write(line) 



if __name__ == "__main__": 
    delWords = [] 
    repWords = {} 

    delWords.extend(["the ", "and ", "in "]) 
    repWords["ancient"] = "old" 
    repWords["month"] = "years" 
    repWords["centuries"] = "years" 

    processTextFile("myText.txt", "myOutText.txt", delWords, repWords) 

Просто к сведению, это написано на Python 3.3.2, который почему я использую элементы(). Используйте iteritems(), если используете Python 2.x, поскольку я думаю, что он более эффективен, особенно для больших текстовых файлов.

+0

Благодарим вас за этот код. Ничего себе, есть много способов достичь моей цели :) – S12000