Python 在for循环中分离打印

Python 在for循环中分离打印,python,python-3.x,Python,Python 3.x,我正在编写一个脚本,它以二进制形式读取子网并将其转换为十进制。脚本需要输出以句点分隔的十进制结果(即,输出如下所示:255.255.255.0) 我试图使用sep=“.”“以句点分隔打印,但是,这似乎不起作用。我怀疑这可能是因为它每次都打印单独的输出,而不是将一个完整的语句连接在一起。我尝试了end=“.”,但这不是一个选项,因为它会在输出的末尾添加一个额外的时段 以下是脚本的一个片段: sub1 = "1111 1111.1111 1111.1111 1111.0000 0000" octet

我正在编写一个脚本,它以二进制形式读取子网并将其转换为十进制。脚本需要输出以句点分隔的十进制结果(即,输出如下所示:
255.255.255.0

我试图使用
sep=“.”“
以句点分隔打印,但是,这似乎不起作用。我怀疑这可能是因为它每次都打印单独的输出,而不是将一个完整的语句连接在一起。我尝试了
end=“.”
,但这不是一个选项,因为它会在输出的末尾添加一个额外的时段

以下是脚本的一个片段:

sub1 = "1111 1111.1111 1111.1111 1111.0000 0000"
octets = [sub1[0:9], sub1[10:19], sub1[20:29], sub1[30:39]]

for conversion in octets:
    print(int((conversion).replace(" ",""), 2), sep=".")
如何使打印输出与句点分开

替换所有空格一次,在
上拆分字符串。
创建列表,然后使用
。转换八位字节后,使用join
重建字符串:

sub1 = "1111 1111.1111 1111.1111 1111.0000 0000"
octets = sub1.replace(' ', '').split('.')

print('.'.join(map(str, [int(i, 2) for i in octets])))
# 255.255.255.0

首先将八位字节转换为十进制,再将它们转换回字符串,然后使用
”连接字符串。join()


如果您的IPv4地址以“01”-字符串中的点/空格分隔的二进制数字给出:

然后,您可以轻松地将ip作为Python中的对象:

>>> import ipaddress
>>> ipaddress.IPv4Address(int(binascii_ip.replace('.','').replace(' ',''), 2))
IPv4Address('255.255.255.0')
只需打印即可获得
255.255.255.0
。此代码将断言输入是有效的

如果您不需要验证输入,也不需要对输入进行任何处理,只需打印,那么简单的字符串操作就足够了:

>>> print(*[int(octet, 2) for octet in binascii_ip.replace(' ', '').split('.')],
...       sep='.')
255.255.255.0

您的问题明确提出了如何分离打印

问题是,您在单个“对象”上多次调用print,因此无法获得所需的行为。在对值列表/元组进行操作时,打印函数分隔符将按照您的需要工作

我的建议是将输入值转换为所需字符串的列表,然后按照您的意愿使用print()和sep=,即在转换循环中不要使用print

>>> from __future__ import print_function # ensuring print function used
>>> # Your conversion code here !
>>> sub4 = "123", "234", "345", "456" # intermediate result from conversion loop
>>> print sub4  # show what we have got 
('123', '234', '345', '456')

>>> print(*sub4, sep='.') # apply separators between objects printed
123.234.345.456
>>> 
正如其他贡献者所展示的那样,有一些替代的转换方法对Python更为“惯用”。 我的观察结果是得到尽可能接近您所需要的值-在字符串或元组等-但没有任何文本格式。
然后应用格式作为最后一步-在本例中,使用打印功能的sep功能。

能否提供所需输出的示例?可以使用“,”。连接(八位字节)@leaf output示例如第一段所示-1111111.1111.1111.0000 0000将作为255.255.255.0输出。Rômulo M.Farias你能再解释一下join的工作原理吗?我可以在没有for循环的打印中使用它吗?
>>> print(*[int(octet, 2) for octet in binascii_ip.replace(' ', '').split('.')],
...       sep='.')
255.255.255.0
>>> from __future__ import print_function # ensuring print function used
>>> # Your conversion code here !
>>> sub4 = "123", "234", "345", "456" # intermediate result from conversion loop
>>> print sub4  # show what we have got 
('123', '234', '345', '456')

>>> print(*sub4, sep='.') # apply separators between objects printed
123.234.345.456
>>>