删除日志文件中的 ^L 字符 [重复]

Posted

技术标签:

【中文标题】删除日志文件中的 ^L 字符 [重复]【英文标题】:Delete ^L character in a log file [duplicate] 【发布时间】:2014-08-08 22:16:36 【问题描述】:

我想删除我在读取文件时找到的所有字符“\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","")

感谢您的回答。

【问题讨论】:

^L 的 Python 表示是 '\x0c''\f' 【参考方案1】:

您可能没有文字字符^L,而是显示为^L

这将是换页符。

s = line.replace('\x0C', '')也是如此。

【讨论】:

HO 我不敢相信事情就这么简单。谢谢你,我从今天早上开始就在这个问题上;)【参考方案2】:

^L (codepoint 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

【讨论】:

【参考方案3】:

您几乎是正确的,您只需要为 ^L 提供不同的表示。

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

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

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

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

一些控制字符有替代的表示,常见的是'\r' 表示^M'\n' 表示^J。根据ASCII control code chart 中给出的名称,它们在the documentation for string literals 的图表中列出。

【讨论】:

以上是关于删除日志文件中的 ^L 字符 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Linux定时删除日志文件/文件夹

如何删除SQL SERVER中的日志文件

linux 日志

Shell定时删除日志

python logging 日志轮转文件不删除问题的解决方法

JBOSS 6.3 访问日志自动删除