Python str.format字符串以固定的间距开始(Python str.format string start at a fixed spacing)
我想输出以下格式:
addrbitvaluenametype
.... ... ...... ...... ...... #..... is the content of each row
我使用str.format来实现它:
STRING_FORMATTER = '{0:13}{1:18}{2:18}{3:30}{4:10}\n'
content = STRING_FORMATTER.format('addr', 'bit', 'value', 'name', 'type')
content = content + STRING_FORMATTER.format('0123', 'LONG STRING THAT EXCEEDS 18 SPACES!!!!!!!!!!!!!!!!', '', '', 'reg')
content = content + STRING_FORMATTER.format('00', '0', '0xAD', 'NAME', 'bit')
.....
我基本上按类型构造字符串。 以上是当第二个字符串超过18个字符空格时,后面的字符串被按下的问题。 有办法解决吗?
或者有没有更好的方法来格式化字符串以前面固定的间距开始?
I want to output the following format:
addrbitvaluenametype
.... ... ...... ...... ...... #..... is the content of each row
I used the str.format to achieve it:
STRING_FORMATTER = '{0:13}{1:18}{2:18}{3:30}{4:10}\n'
content = STRING_FORMATTER.format('addr', 'bit', 'value', 'name', 'type')
content = content + STRING_FORMATTER.format('0123', 'LONG STRING THAT EXCEEDS 18 SPACES!!!!!!!!!!!!!!!!', '', '', 'reg')
content = content + STRING_FORMATTER.format('00', '0', '0xAD', 'NAME', 'bit')
.....
I basically construct the string by the type. The above is a problem that when the 2nd string exceeds 18 char spaces, the string behind is pushed. Is there a way to solve it?
Or is there a better way to format the string to start at a fixed spacing in front?
原文:https://stackoverflow.com/questions/47824510
2020-02-15 23:56
满意答案
要执行您想要的操作,需要在三个字段中拆分字符串。 下面使用的语法要求使用Python 3.5或更高版本的PEP 448 - 使用的附加解包概括功能。 该函数将字符串分成正在跨越的三个字段的正确字段宽度:
STRING_FORMATTER = '{0:13}{1:18}{2:18}{3:30}{4:10}\n'
def split(s,*widths):
current = 0
for width in widths:
yield s[current:current + width]
current += width
content = STRING_FORMATTER.format('addr', 'bit', 'value', 'name', 'type')
content += STRING_FORMATTER.format('0123', *split('LONG STRING THAT EXCEEDS 18 SPACES!!!!!!!!!!!!!!!!',18,18,30), 'reg')
content += STRING_FORMATTER.format('00', '0', '0xAD', 'NAME', 'bit')
print(content)
输出:
addr bit value name type
0123 LONG STRING THAT EXCEEDS 18 SPACES!!!!!!!!!!!!!!!! reg
00 0 0xAD NAME bit
To do what you want requires splitting the string across the three fields. The syntax used below requires Python 3.5 or later for the PEP 448 - Additional Unpacking Generalizations feature used. The function breaks a string into the correct field widths for the three fields being spanned:
STRING_FORMATTER = '{0:13}{1:18}{2:18}{3:30}{4:10}\n'
def split(s,*widths):
current = 0
for width in widths:
yield s[current:current + width]
current += width
content = STRING_FORMATTER.format('addr', 'bit', 'value', 'name', 'type')
content += STRING_FORMATTER.format('0123', *split('LONG STRING THAT EXCEEDS 18 SPACES!!!!!!!!!!!!!!!!',18,18,30), 'reg')
content += STRING_FORMATTER.format('00', '0', '0xAD', 'NAME', 'bit')
print(content)
Output:
addr bit value name type
0123 LONG STRING THAT EXCEEDS 18 SPACES!!!!!!!!!!!!!!!! reg
00 0 0xAD NAME bit
2017-12-15
相关问答
>>> "{0:0>3}".format(1)
'001'
>>> "{0:0>3}".format(10)
'010'
>>> "{0:0>3}".format(100)
'100'
说明: {0 : 0 > 3}
│ │ │ │
│ │ │ └─ Width of 3
│ │ └─ Align Right
│ └─ Fill with '0'
└─ Element index
>>> "{0:0>3}".format(1)
'001'
>>> "{0:0>3}"....
根据源代码 ,这是一个文档错误。 没有浮点说明符的行为的正确描述是“像'g',但始终在小数点后至少有一个数字”。 According to the source code, this is a documentation bug. The correct description for the behaviour without a floating point specifier is "like 'g', but always with at least one digit after the...
一种选择是定义自己的Formater 。 您可以继承标准的并覆盖get_field以为您的用例返回一些合理的默认值。 请参阅链接以获取更多文档。 One option would be to define your own Formater. You can inherit the standard one and override get_field to return some reasonable default for your use case. See the link for som...
引号不是格式语句返回值的一部分,它们来自python解释器,告诉你它正在向你显示一个字符串值: momerath:~ mgregory$ python
Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more info...
你误解了'{:0{N}d}'.format(d, N=N) 。 格式规范中的d不引用变量d ; 它意味着以10为基数打印一个整数.Python将该字段与d参数的位置匹配。 当您尝试使用f字符串f'{:0{N}d}' ,f字符串没有位置参数。 Python不知道要为该字段设置什么格式。 你需要修复你的原始bug,并把它放在前面:所以Python知道它应该在那里格式化。 作为参考, format正确的版本应该是'{d:0{N}}'.format(d=d, N=N) 。 You've misunders...
换行符正在被print函数添加,而不是str.format 。 从文档 : print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) 将objects打印到文本流file ,以sep分隔,然后以end 。 注意end参数默认为'\n' (换行符)。 str.format无法删除此换行符,因为它在格式化字符串被print 后才存在。 您将需要使用end="" : print("{}".format("Hello"), end="...
您的问题是您将end=''参数传递给format函数,而不是print函数。 改变这一行: print ( '{0:3d} {1:6d} {2:10s} '.format (int1,int2,string1,end=''))
对此: print ( '{0:3d} {1:6d} {2:10s} '.format (int1,int2,string1), end='')
顺便说一句,你也应该给PEP8一个读数。 它定义了Python编码样式的标准,您应该尝试遵循这些标准,除非您与一组已经就其他...
要执行您想要的操作,需要在三个字段中拆分字符串。 下面使用的语法要求使用Python 3.5或更高版本的PEP 448 - 使用的附加解包概括功能。 该函数将字符串分成正在跨越的三个字段的正确字段宽度: STRING_FORMATTER = '{0:13}{1:18}{2:18}{3:30}{4:10}\n'
def split(s,*widths):
current = 0
for width in widths:
yield s[current:current...
我认为这是一个(次要的)文档错误。 如果你在格式字符串中传递!s代码, str.format调用str ,但是unicode.format调用unicode 。 这些文档可能是用Python 3编写的,其中所有字符串都是Unicode而且!s总是调用str 。 整个新的格式化系统从Python 3.0反向移植到Python 2.6中,并且在文档中忽略了一些含糊不清的内容并不令人震惊。 I think this is a (minor) documentation bug. str.format c...
将locals() (或globals() )传递给format (或% )的主要问题通常是,格式字符串可能来自不受信任的来源,并且您可能会暴露出您不想要的变量。 如果您只是格式化文字字符串,那不是问题,但如果您可能有不受信任的格式字符串,您必须非常仔细地考虑您正在做什么 - 并且更容易做到这一点。 更小的问题是你的一些代码的读者不会理解locals或**语法,并且很难弄清楚它的作用或原因。 这不是一个争论。 事实上,你甚至可以说很多Python的设计决定都是为了确保这几乎不是一个好的论据 - 语...
相关文章
Python 字符串操作,字符串序列用于表示和存储文本,python中字符串是不可变的,一旦声明,不能
...
字符串的格式化 在python中也有类似于c中的printf()的格式输出标记。在python中格式化
...
今天遇见一个问题.不知道怎么解决. 如: 自己建立了一个文件read.txt 里面存放这样的 键值
...
列表就像java里的collection,所具有的特性也要比元组更多,更灵活,其character总结
...
python2和python3的区别,1.性能 Py3.0运行 pystone benchmark的速
...
Step 1 : Edit your solrconfig.xml to add the reques
...
Java String类 字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提
...
转载请注明出处:http://blog.csdn.net/lonelytrooper/article/
...
pro-du-cer n. 1. Someone from a game publisher who
...
命令格式: SET key value 把字符串值value存储到key中。如果存在此key,SE
...
最新问答
如果启用了复制处理程序,请确保将其置于其中一个安全角色之后。 我见过人们做的另一件事是在不同的端口上运行admin。 最好在需要auth的页面上使用SSL,这样你就不会发送明确的密码,因此管理和复制将发生在8443上,而常规查询将在8080上发生。 如果您要签署自己的证书,请查看此有用的SO页面: 如何在特定连接上使用不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re
第一:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大写'T')。 xpath区分大小写。 第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。 有很多方法可以在这里获得制作和模型
这是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;
问题是,在启用Outlook库引用的情况下, olMailItem是一个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引用此Object 。 这基本上是一个递归错误,因为你有对象试图自己分配自己。 还有另一个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另一个错误(可能是
我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话。 当您开始捕获时,数据量似乎过大,但如果您能够发现任何看起来像您的SOAP消息的片段(应该很容易发现),那么您可以通过右键单击并选择来快速过滤到该对话'关注TCP Stream'。 然后,您可以在弹出窗口中查看您编写的SOAP服务与Silverlight客户端之间的整个对话。 如果一切正常,请关闭弹出窗口。 作为一个额外的好处,wireshar
Android默认情况下不提供TextView的合理结果。 您可以使用以下库并实现适当的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/
你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV
12个十六进制数字(带前导0x)表示48位。 那是256 TB的虚拟地址空间。 在AMD64上阅读wiki(我假设你在上面,对吗?)架构http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar
这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass: class_attribute = [] 这里已经为类定义了MyClass.class_attribute ,您可以使用它。 如果您创建MyClass实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。 您只能在实例上使用它们。 在方法__init__中定