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

7
我希望删除读取文件时发现的所有字符“\ 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","")

感谢您的回答。

2
^L 的 Python 表示是 '\x0c''\f' - Mark Ransom
3个回答

4

也许你没有字面上的字符^L,但是显示为^L

这将是换页符字符。

因此,执行s = line.replace('\x0C', '')


哇,我简直不敢相信这个问题如此简单。谢谢你,我从今早开始就在解决这个问题了 ;) - Kvasir

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
你几乎翻译正确了,只需要使用不同的表示方法来代替^L即可。
s = line.replace("\x0c", "")

这里有一个函数,可以返回任何控制字符的表示。
def cc(ch):
    return chr(ord(ch) & 0x1f)

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

一些控制字符具有备用表示方式,常见的是使用'\r'代替^M以及使用'\n'代替^J。这些备用表示方式在一个表格中列出,该表格位于字符串字面值的文档中,根据ASCII 控制字符表中所给的名称进行命名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接