如何从 python 中的字符串中删除换页
how to remove form feed from string in python
我有一个包含以下内容的文本文件:
'\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c'
如您所见,我想删除所有换页字符。
我尝试了各种解决方案,但由于某些原因它们似乎不起作用。
例如,我尝试的是删除左侧 '\x0c
、右侧 \x0c'
和所有其他 \x0c
,但输出保持不变。
代码是使用:
import re
import string
with open('AF-40-A-00020539.txt', "r", encoding="ascii") as input_file:
input_content = input_file.read()
print(
input_content.lstrip('\'\x0c')\
.rstrip('\x0c\'')\
.strip('\x0c')
.replace('\x0c', '')
)
执行此操作后,我将其作为输出 \x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c'
,这不是我所期望的。
这是什么原因?如何删除换页字符?
更新,感谢joao的回答:
\xHH,其中 HH 是两个十六进制数字,是一个 recognised escape sequence to write ASCII characters using their corresponding hex value,就像 \n 代表换行符一样。
.replace('\x0c', '')
不起作用,因为在此字符串文字 \xOc
中被转义,而在文本文件中,它只是作为纯文本复制。
我不是 100% 确定,但请在 .replace 中试试这个:
line.replace('\x0C', '')
告诉我:)
您可以使用 re.sub()
:
import re
string = "Hello, '\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c'World!"
print(re.sub(r"'(\x0c)+'", '', string))
输出:
Hello, World!
这里有一个歧义:当你说文件包含 \x0c
时,文件中的单个字符是否显示为代表十六进制值 0x0c
的转义序列?或者它真的是一个 4 个字符的字符串?您应该尝试使用二进制编辑器或 len()
函数来确定。
我怀疑第二种情况,因为你说你得到 \x0c
作为输出。如果是第一种情况,您会看到 ^L
、空白行或一些指示不可打印字符的乱码。
如果是单个字符,则
s = s.replace('\x0c', '')
将删除它们。如果他们真的是4个字符,那么
s = s.replace('\x0c', '')
应该可以。请注意额外的反斜杠 \
,它将转义序列转换为 4 个字符的字符串。
我有一个包含以下内容的文本文件:
'\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c'
如您所见,我想删除所有换页字符。
我尝试了各种解决方案,但由于某些原因它们似乎不起作用。
例如,我尝试的是删除左侧 '\x0c
、右侧 \x0c'
和所有其他 \x0c
,但输出保持不变。
代码是使用:
import re
import string
with open('AF-40-A-00020539.txt', "r", encoding="ascii") as input_file:
input_content = input_file.read()
print(
input_content.lstrip('\'\x0c')\
.rstrip('\x0c\'')\
.strip('\x0c')
.replace('\x0c', '')
)
执行此操作后,我将其作为输出 \x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c'
,这不是我所期望的。
这是什么原因?如何删除换页字符?
更新,感谢joao的回答: \xHH,其中 HH 是两个十六进制数字,是一个 recognised escape sequence to write ASCII characters using their corresponding hex value,就像 \n 代表换行符一样。
.replace('\x0c', '')
不起作用,因为在此字符串文字 \xOc
中被转义,而在文本文件中,它只是作为纯文本复制。
我不是 100% 确定,但请在 .replace 中试试这个:
line.replace('\x0C', '')
告诉我:)
您可以使用 re.sub()
:
import re
string = "Hello, '\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c'World!"
print(re.sub(r"'(\x0c)+'", '', string))
输出:
Hello, World!
这里有一个歧义:当你说文件包含 \x0c
时,文件中的单个字符是否显示为代表十六进制值 0x0c
的转义序列?或者它真的是一个 4 个字符的字符串?您应该尝试使用二进制编辑器或 len()
函数来确定。
我怀疑第二种情况,因为你说你得到 \x0c
作为输出。如果是第一种情况,您会看到 ^L
、空白行或一些指示不可打印字符的乱码。
如果是单个字符,则
s = s.replace('\x0c', '')
将删除它们。如果他们真的是4个字符,那么
s = s.replace('\x0c', '')
应该可以。请注意额外的反斜杠 \
,它将转义序列转换为 4 个字符的字符串。