删除日志文件中的^ L字符

时间:2014-06-18 14:45:47

标签: python unicode

我想删除我在阅读文件时找到的所有字符“\ L”。我在读一行时尝试使用此功能:

def cleanString(self, s):
            if isinstance(s, str):
                    s = unicode(s,"iso-8859-1","replace")
                    s=unicodedata.normalize('NFD', s)
                    return s.encode('ascii', 'ignore')

但它不会删除此字符。有人知道怎么做吗?

我也尝试使用replace功能,但效果并不好:

s = line.replace("\^L","")

感谢您的回答。

3 个答案:

答案 0 :(得分:3)

可能您没有文字字符^L,但有些内容显示为^L

这将是换页符。

s = line.replace('\x0C', '')

答案 1 :(得分:2)

^L(代码点0C)是一个ASCII字符,因此不会受到ASCII编码的影响。你可以使用一个小的正则表达式过滤掉所有的控制字符(当你在它的同时,过滤掉所有非ASCII的字符串):

import re
def cleanString(self, s):
    if isinstance(s, str):
        s = unicode(s,"iso-8859-1","replace")
        s = unicodedata.normalize('NFD', s)
        s = re.sub(r"[^\x20-\x7f]+", "", s)  # remove non-ASCII/nonprintables
        return str(s)                        # No encoding necessary

答案 2 :(得分:2)

你差不多正确,你只需要^L的不同表示。

s = line.replace("\x0c", "")

这是一个函数,它将返回任何控制字符的表示。

def cc(ch):
    return chr(ord(ch) & 0x1f)

>>> cc('L')
'\x0c'

某些控制字符具有替代表示形式,常见表示'\r'^M'\n'^J。这些列在the documentation for string literals中的图表中,基于ASCII control code chart中提供的名称。