如何转到下一行而不是打印\n?

2024-09-10 15:16:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我把十六进制数转换成ASCII码,然后直接在屏幕上打印出来。但是我没有转到下一行,而是在我的输出控制台上得到'\n'。请你查一下我的密码,告诉我为什么会这样?你知道吗

十六进制值存储在一个名为“hexa”的文件中。你知道吗

fin = open('hexa', 'r') 
hexlist = fin.readline().split(' ')
for i in hexlist:
    print(str(codecs.decode(i, 'hex')).strip("b'"), end='')
fin.close()

这是我得到的结果:

someRandomChanracters_._.\n\nOnly

但我的预期结果是:

someRandomChanracters_._.

Only

提前感谢您的回复。你知道吗

编辑1: 我想我的问题不是重点。当从十六进制转换为ascii码时,我遇到了这些

a carriage return (0x0d) or a line feed (0x0a)

将打印字符'\n',而不是转到新行。此外,当我遇到单引号(任何特殊字符)时,它们将按以下格式打印:

"'"
"["hello"]" instead of [hello]

文本文件的内容如下:

D8 FF E0 FF 10 00 46 42 11 21 01 00 48 00 27 6E 2E 5F 2E 5F 6F 73 65

我的目标是将这个十六进制文件内容转换成文本格式,而不需要任何额外的引号或字符,如'\n''\t'

我的问题是如何克服这一点?你知道吗


Tags: 文件密码内容helloreadline屏幕asciiopen
3条回答

试试这个

with open('file1.txt','r') as f:
    data = f.readlines()
    data_list = [line.replace('\n', '') for line in data]

print(data_list)

输出:

['someRandomChanracters_._.', 'Only']

要以换行方式打印

print(*data_list, sep='\n')
or
# for i in data_list:
#     print(i)
-------------
# Output:
# someRandomChanracters_._.
# Only

让我们来看看你的代码实际上做了什么。你知道吗

假设是一个两个字符的字符串(比如0a),然后将其解码为一个单字节数组。然后以这个(str(...))的字符串表示,在我们的示例中,它将是b'\n'。为什么?值为10的单字节(0x0a)是ASCII中的换行符,因此Python将其显示为\n,而b''的内容是显示它是一个字节数组。然后去掉b':s,然后打印剩下的内容—反斜杠和字母n。你知道吗

与其采用字节数组的字符串表示法(这对于除调试以外的任何事情都是毫无用处的),不如将其解码为字符串。像这样(未经测试)的东西可能有用

for i in hexlist:
    print(codecs.decode(i, 'hex').decode('ascii'), end = '')

但是,一次只能解码一个字节,这意味着任何多字节编码(如UTF-8)都无法工作。更好的方法是一次解码整个字符串(假设字符串不会很长):

print(bytes([int(x, 16) for x in hexlist]).decode('utf-8'))

(请注意,for循环已使用列表理解在print调用中移动)。你知道吗

当您得到这种错误时,您可以使用字符串“split”函数。你知道吗

string_variable = "someRandomChanracters_._.\n\nOnly"

first_part = string_variable.split("\n\n")[0] #before \n\n
second_part = string_variable.split("\n\n")[1] #after \n\n

要按所需方式打印:

print(first_part + "\n" + "\n" + second_part)

相关问题 更多 >