Как удалить непечатаемые символы из строки?

Я читаю файл слова, используя приведенный ниже код:

import win32com.client as win32

word = win32.dynamic.Dispatch("Word.Application")
word.Visible = 0
doc = word.Documents.Open(SigLexiconFilePath)

Я получаю строки из файла, в котором много непечатаемых символов:

str = "\xa0keine\xa0freigäbü\xa0\x0b\r\x07"

Я пробовал ниже коды для удаления непечатаемых символов:

import string 

str = "\xa0keine\xa0freigäbü\xa0\x0b\r\x07"
filtered_string = "".join(filter(lambda x:x in string.printable, str))

Это дает мне вывод ниже:

keinefreigb\x0b\r

Другой фрагмент кода, который я пробовал:

str = str.split('\r')[0]
str = str.strip()

Это дает мне вывод ниже:

keine\xa0freigäbü

Как я могу удалить все эти непечатаемые символы, чтобы получить результат ниже желаемого, используя минимальный код:

keine freigäbü

person Anudocs    schedule 16.12.2019    source источник


Ответы (2)


Все эти символы кажутся пробелами. Вы можете попробовать модуль Python unicodedata, чтобы преобразовать некоторые из них в правильные символы пробела. последовательно:

>>> unicodedata.normalize("NFKD","\xa0keine\xa0freigäbü\xa0\x0b\r\x07")
' keine freigäbü \x0b\r\x07'

Затем вы можете выполнить серию замен и команду полосы, чтобы получить то, что хотите, если набор символов, которые вы пытаетесь удалить, не так уж и много.

>>> ' keine freigäbü \x0b\r\x07'.replace("\x0b"," ").replace("\r"," ").\
        replace("\x07"," ").strip()
'keine freigäbü'

Надеюсь, это поможет.

person Alper    schedule 16.12.2019

Попробуйте с этими строками.

import re

def convert_tiny_str(x:str):
    """ Taking in consideration this:

    > https://www.ascii-code.com/

    Citting: "The first 32 characters in the ASCII-table are unprintable control
    codes and are used to control peripherals such as printers." 
    From Hex code 00 to Hec code 2F, [00, 2F].

    Now, from ASCII Extended, the printable characters are listed
    from \x20 to \xFF in Hexadecimal code, [20, FF].

    For that the Regular Expression that I can show like a possible
    solution it is this:

    1- Replace "all the characers, except the printable characters", by a ''.

    2- Then, the character \xa0 it is still componing the str result.
    Replace it by an ' '.
    """

    _out = re.sub(r'[^\x20-\xff]',r'', _str)
    # >> '\xa0keine\xa0freigäbü\xa0'

    return re.sub(r'\xa0',r' ', _out)


_str = "\xa0keine\xa0freigäbü\xa0\x0b\r\x07"
x = convert_tiny_str(_str)

print(x)
# >>' keine freigäbü '

Сделанный.

person Franco Gil    schedule 16.12.2019