gpt4 book ai didi

python - 由于 Python 中的\r,无法从文件中检索正确的数据

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:08 25 4
gpt4 key购买 nike

您好,我在写入和读取文件中的确切数据时遇到问题。

我正在做的是首先将列表转换为字符串,然后将其写入文件

S = [63, 16, 13, 30, 22, 13, 99, 68, 75, 91, 73, 80, 90]

现在,如果我这样做将其转换为字符串,

UpdatedPlainText = ''.join(chr(s) for s in S)

print("This is the Data:", UpdatedPlainText)

由于原始List中存在13的两个int值,数据会困惑,等于\r

输出:

cDK[IPZ the Data: ?►

我知道这只是这样显示,但原始数据仍然存在。

可以使用此检索数据,这里数据在打印之前首先转换为整数,

L = list(ord(s) for s in UpdatedPlainText)
print(L)

输出:

[63, 16, 13, 30, 22, 13, 99, 68, 75, 91, 73, 80, 90]

但不是直接将数据从 String 转换回 integer,如果我首先将 UpdatedPlainText 的值写入文件,

PlainText = open('uText.txt', 'w')
PlainText.write(UpdatedPlainText)
PlainText.close()

然后读取这个文件,

PlainText = open('uText.txt', 'r')
PlainText = PlainText.read()

然后打印文件中的数据,

L = list(ord(s) for s in PlainText)
print(L)

输出会有所不同,

[63, 16, 10, 30, 22, 10, 99, 68, 75, 91, 73, 80, 90]

如您所见,值 13 被替换为 10,这是由于 \r 等于 13

如何解决这个问题?如何防止 13 转换为 \r

最佳答案

在 python 文档中它说:

Python on Windows makes a distinction between text and binary files; the end-of-line characters in text files are automatically altered slightly when data is read or written.

您正在尝试检索与文本不同的数据,因此可以选择使用二进制模式(请参阅上面的答案。文档继续:

This behind-the-scenes modification to file data is fine for ASCII text files, but it’ll corrupt binary data like that in JPEG or EXE files.Be very careful to use binary mode when reading and writing such files. On Unix, it doesn’t hurt to append a 'b' to the mode, so you can use it platform-independently for all binary files.

就像您的情况一样,默认模式是更改数据。因此,如果您出于某种原因想默认使用读写选项,您可以尝试在将字符串写入文件之前对其进行编码。

PlainText.encode('base64','strict')

读取后,解码

PlainText.decode('base64','strict')

工作量太大,但只是另一种选择。

关于python - 由于 Python 中的\r,无法从文件中检索正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19480525/

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