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

时间:2019-07-05 04:08:56

标签: python python-3.x

我正在将十六进制数转换为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'之类的字符

我的问题是如何克服这个问题?

5 个答案:

答案 0 :(得分:1)

尝试一下

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

答案 1 :(得分:1)

当您遇到此类错误时,可以使用字符串“ 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)

答案 2 :(得分:0)

尝试一下:

with open('hexa', 'r') as f:
    for line in f:
        line = line.split(' ')
        print(str(codecs.decode(line, 'hex')).strip("b'"), end='')

即使出现问题,with关键字也会自动关闭文件。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

让我们看一下代码的实际作用。

您假设使用了两个字符的字符串(假设为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调用内移动了。)