删除日志文件中的 ^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 字符 [重复]的主要内容,如果未能解决你的问题,请参考以下文章