Я не могу применить функцию поиска и замены для файла слова через Python - PullRequest
0 голосов
/ 22 марта 2019
import os
import sys
import fileinput

print ("Text to search for:")
textToSearch = input( "> " ) 

print ("Text to replace it with:")
textToReplace = input( "> " )

print ("File to perform Search-Replace on:")
fileToSearch  = input( "> " )
#fileToSearch = 'D:\dummy1.txt'

tempFile = open( fileToSearch, 'r+' , encoding="utf8")

for line in fileinput.input( fileToSearch ):
    if textToSearch in line :
        print('Match Found')
    else:
        print('Match Not Found!!')
    tempFile.write( line.replace( textToSearch, textToReplace ) )
tempFile.close()

input( '\n\n Press Enter to exit...' )

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Вы получаете ошибку 0x8f, потому что там есть символ, который не является символом Юникода. Проверьте, как текстовый файл сохраняется в блокноте, это может быть ANSI, а не UTF-8.

Кроме того, я бы сделал пару вещей по-другому.

Сначала используйте re.search, а не просто внутри. Вы получите лучшие результаты, и если позже вы захотите добавить больше детализации, например, только целых слов, ее легко обновить.

Во-вторых, используйте настоящую библиотеку Excel, такую ​​как openpyxl, и то же самое для docx, например docx (это название библиотеки). Редакторы отдают нам их в виде простого текста, но они хранятся в виде закодированных файлов большего размера. Попытка проработать их с помощью fileinput, не рассматривая их как таковые, может привести к путанице. Вы можете выбрать, какую библиотеку использовать, основываясь на имени файла, так что у вас все еще есть возможность повторного использования, но теперь вы используете правильный инструмент для работы.

0 голосов
/ 22 марта 2019

Похоже, вы открываете двоичный файл (если это так, сохраняете его в виде простого текста) или файл с несовпадающей кодировкой (utf-8).

Если вам нужно работать с документом docx, вам нужна специальная библиотека для открытия и чтения, например, python-docx .

...