Python 如何转到下一行而不是打印\n?
我把十六进制数转换成ASCII码,然后直接在屏幕上打印出来。但我没有转到下一行,而是在输出控制台上得到“\n”。你能查一下我的密码并告诉我为什么我会得到这个吗 十六进制值存储在名为“hexa”的文件中Python 如何转到下一行而不是打印\n?,python,python-3.x,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(
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”
我的问题是如何克服这个问题?试试这个:
with open('hexa', 'r') as f:
for line in f:
line = line.split(' ')
print(str(codecs.decode(line, 'hex')).strip("b'"), end='')
带有关键字的将自动关闭文件,即使出现问题。试试这个
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
当您遇到这种错误时,可以使用字符串“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)
让我们来看看您的代码实际上做了什么
你可以把一个大概是两个字符的字符串(比如说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)都无法工作。更好的方法是一次解码整个字符串(假设字符串不会非常长):
(请注意,for
循环已通过列表理解在打印
调用中移动)。感谢您的回复@Evan,但我收到您代码的TypeError。编解码器.decode
不允许在中给出列表。我尝试了不同的for循环,一个用于拆分,另一个用于打印,但我得到了相同的'\n'
问题。你能发布文件的外观吗?我发布了@EvanNo@shaik moeed,替换了'\n',我们将其从输出中完全删除,但这不是我的目标。我想转到新行,而不是打印“\n”。@RishiNjr您可以使用for loop
中的print
以新行打印。这就是你的期望吗?抱歉@Shaik我的模糊问题我编辑得更具体抱歉@eggrobot我的模糊问题我编辑得更具体抱歉@sp1rs我的模糊问题我编辑得更具体你能解释什么D8 FF E0 FF 10 00 46 42 11 21 01 00 48 00 27 6E 2E 5F 2E 5F 5F 6F 73吗65
会是一个字符串吗?这只是大量十六进制的一部分。有些表示动作,因此它们没有ascii对应项前四对表示这一点(Øÿÿ)
。下一对没有ascii表示。这个someRandomChanracters.\n\n仅仅是十六进制数转换后文本的一部分。对于无效的代码序列,您希望如何处理?
for i in hexlist:
print(codecs.decode(i, 'hex').decode('ascii'), end = '')
print(bytes([int(x, 16) for x in hexlist]).decode('utf-8'))