Python присвоить переменной диапазон искомых символов utf-8 [^\x20-\x7E]+

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

задача: нужно отсортировать файлы в папке от символов не содержащих указанный диапазон из таблицы utf-8 (т.е. не латиницу), с последующих сохранением отредактированных текстовых файлов.

проблема 1: как присвоить переменной несколько искомых значений? (с последующей заменой).

в моём коде в переменной texttofind могу ввести только одно «слово» либо «управляющий символ» (\0, \n, \r и т.д.),

проблема 2: как ввести регулярное выражение в переменную, по примеру в заголовке вопроса?

либо: как из Python запустить макрос блокнота notepad++?

#https://www.youtube.com/watch?v=0PlSnr0Tj4o&ab_channel=KamalPokharel
import os
texttofind = '\0'
texttoreplace = '\n'
sourcepath = os.listdir('InputFiles/')
for file in sourcepath:
    inputfile = 'InputFiles/'+file
    print('Conversion is ongoing for:' +inputfile)
    with open(inputfile, 'r') as inputfile:
        filedata = inputfile.read()
        freq = 0
        freq = filedata.count(texttofind)
    destinationpath = 'OutputFile/' + file
    filedata = filedata.replace(texttofind, texttoreplace)
    with open(destinationpath, 'w') as file:
        file.write(filedata)
    print('Total %d Record Replaced' %freq)


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

2 Answers

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

Заменяет символы из указанного диапазона таблицы UTF-8 оставляя ASCII символы.
Можно добавлять дополнительные фильтры, «пронумеровывая» новые искомые переменные textofind1 , textofind2 …
Добавив новую строку filedata =… с новыми искомыми переменными

#https://www.youtube.com/watch?v=0PlSnr0Tj4o&ab_channel=KamalPokharel
import os
import re
 
texttofind = '[^\x20-\x7E]+'
texttoreplace = '\n'
sourcepath = os.listdir('InputFiles/')
for file in sourcepath:
    inputfile = 'InputFiles/'+file
    print('Conversion is ongoing for:' +inputfile)
    with open(inputfile, 'r') as inputfile:
        filedata = inputfile.read()
        freq = 0
        freq = filedata.count(texttofind)
    destinationpath = 'OutputFile/' + file
    filedata = re.sub(texttofind, texttoreplace, filedata)
    with open(destinationpath, 'w') as file:
        file.write(filedata)
    print('Total %d Record Replaced' %freq)

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

Для поиска строк содержащих искомое слово, и последующего удаления строк не содержащих искомого слова сработает вот так,
так же включен поиск символов из кодировки utf-8, не входящих в латинские символы кодировки ascii

from __future__ import print_function # если python2
import os
import re
 
words = ('msh', 'mat', 'dds')
 
r1 = re.compile(b'[\x20-\x7F]+')
r2 = re.compile('|'.join(map(re.escape, words)))
 
for fname in os.listdir('InputFiles'):
    with open(os.path.join('InputFiles', fname), 'rb') as i:
        with open(os.path.join('OutputFiles', fname), 'w') as o:
            for txt in filter(r2.search, map(bytes.decode, r1.findall(i.read()))):
                print(txt, file=o)

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