gpt4 book ai didi

python-3.x - 如果输出到 python 中的文本文件,则替换的字符串不可见

转载 作者:行者123 更新时间:2023-12-03 18:20:22 26 4
gpt4 key购买 nike

尝试搜索了很多帖子,但找不到答案。下面是我的脚本,我试图通过编写程序来执行“sed”操作。

import sys

def sed(pattern, replace, source, dest):
fin = open(source, 'r')
fout = open(dest, 'w')

for line in fin:
line = line.replace('\x00', '')
line = line.replace(pattern, replace)
print(line)
fout.write(line)

fin.close()
fout.close()

def main(name):
pattern = 'to be'
replace = 'is'
source = 'C:\....\input.txt'
dest = 'C:\...\output.txt'
sed(pattern, replace, source, dest)

if __name__ == '__main__':
main(*sys.argv)

我正在从输入文本文件中读取数据,替换字符串并将完整的字符串连同被替换的字符串一起写入输出文本文件。

我能够在“print(line)”中看到被替换的字符串,但是当我检查 output.txt 时,它显示了一些中文文本。

请告诉我如何在输出文本文件中获取相同的数据。

最佳答案

我相信您使用的是 Python 2,而不是 Python 3。您的输入文件编码为 UTF16,但使用的是默认文件编码。这就是为什么要删除额外的空字符 (\x00) 的原因。

输出文件随后以 UTF-16 字节顺序标记 (BOM) (0xFF 0xFE) 作为前 2 个字节写入,但由于删除了空字节,因此每个 2 字节 UTF16 字符的值都发生了变化。这就是为什么当您查看它时它显示为亚洲文本。例如:

>>> b'to'.decode('utf16')
u'\u6f74'
>>> print(b'to'.decode('utf16'))

一种解决方案是使用 Python 3 并在打开文件时提供编码参数:

fin = open(source, 'r', encoding='utf16')
fout = open(dest, 'w', encoding='utr16')

如果您必须使用 Python 2,请使用 io.open()打开文件:

import io
fin = io.open(source, 'r', encoding='utf16')
fout = io.open(dest, 'w', encoding='utf16')

在任何一种情况下,您都应该使用 with 来确保在发生异常的情况下文件将被正确关闭:

def sed(pattern, replace, source, dest, encoding='utf16'):
with open(source, 'r', encoding=encoding) as fin:
with open(dest, 'w', encoding=encoding) as fout:
for line in fin:
line = line.replace(pattern, replace)
fout.write(line)

您不需要关闭文件,因为当 with 超出范围时,它们会自动关闭,在这种情况下,当 sed() 返回时。

关于python-3.x - 如果输出到 python 中的文本文件,则替换的字符串不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49971989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com