您好,我无法写入文件,然后从文件中读取确切的数据。
我正在做的是先将转换list
为string
,然后将其写入文件
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)
由于存在两个原始int
值,等于13
List
\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]
但是,与其直接将数据integer
从from转换回来String
,如果我先将UpdatedPlainText
in的值写入文件,
PlainText = open('uText.txt', 'w')
PlainText.write(UpdatedPlainText)
PlainText.close()
然后read
这个文件,
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文档上它说:
Windows上的Python区分文本文件和二进制文件。读取或写入数据时,文本文件中的行尾字符会自动更改。
您正在尝试检索与文本不同的数据,因此可以选择使用二进制模式(请参见上面的答案。文档继续进行:
这种对文件数据的幕后修改对于ASCII文本文件而言是很好的选择,但它会破坏JPEG或EXE文件中的二进制数据。在读写此类文件时,请务必小心使用二进制模式。在Unix上,将'b'附加到该模式没有什么坏处,因此您可以独立于平台使用它来处理所有二进制文件。
就像您的情况一样,默认模式是更改数据。因此,如果出于某种原因默认要使用读写选项,则可以在将字符串写入文件之前尝试对其进行编码。
PlainText.encode('base64','strict')
并在读取后解码
PlainText.decode('base64','strict')
太多的工作,但这只是另一种选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句