python右对齐输出-python:格式化输出字符串,右对齐

我正在处理一个包含坐标x、y、z的文本文件

1

2

31 128 1298039

123388 0 2

....

每一行使用

1words = line.split()

处理完数据后,我需要将坐标写回另一个txt文件中,以便每列中的项都右对齐(以及输入文件)。每一行都由坐标组成

1line_new = words[0] + " " + words[1] + " " words[2].

在C++中是否有任何类似EDCOX1、0等的机械手允许设置宽度和对齐方式?

变量words和word之间的关系是什么?

@马克:打字错误,已经解决了…

使用更新的str.format语法尝试此方法:

1line_new = "{:>12} {:>12} {:>12}".format(word[0], word[1], word[2])

下面介绍如何使用旧的%语法(对于不支持str.format的旧版本python很有用):

1line_new = "%12s %12s %12s" % (word[0], word[1], word[2])

注意"旧"语法是如何更清晰、更容易阅读和更短的。

我想我应该添加一个比提供的更直接的链接:docs.python.org/2/library/…

当然,越短,我不知道清洁剂的真正含义,但我认为"更容易阅读"只是因为它很熟悉。如果您还不熟悉其中一种格式,那么新格式似乎更易于阅读。".format"对于字符串格式来说,显然比百分比/模块更直观。右箭头的右对齐似乎也相当直观。

如果您使用的是python 2,并且用非拉丁符号标记行,请使用unicode!(u"...".format)

在python 2中,如何使用%

@标记一种方法旧方法更干净的方法是使用更少的字符。是的,熟悉后,新的方法会变得直观,但并不干净和简单。对于那些习惯了通过可敬的C语言(一种典型的简洁和精确的语言)进入我们的语法的人来说,旧方法更直观。新方法有什么先例?

@StephenBoston所以你是说有一种方法可以让python和c一样可读?这确实是一个普遍的原因。

"Mark Ha!好点。我笑了。但是如果我可以借鉴您关于熟悉性的观点,经验丰富的C程序员会发现C比乍一看Perl更容易阅读,所以…之后,即使我能读到新的方法,我还是更喜欢旧的方法。我发现新的方法神秘而冗长,更喜欢新的格式函数。

您可以这样对齐它:

1print("{:>8} {:>8} {:>8}".format(*words))

其中,>表示"右对齐",8表示特定值的宽度。

这里有一个证据:

1

2

3

4

5

6>>> for line in [[1, 128, 1298039], [123388, 0, 2]]:

print("{:>8} {:>8} {:>8}".format(*line))

1 128 1298039

123388 0 2

ps.*line表示将解包line列表,因此.format(*line)的工作方式与.format(line[0], line[1], line[2])类似(假设line是一个只有三个元素的列表)。

可以通过使用rjust来实现:

1line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10)

我只是想知道为什么这个答案没有多少赞成票。只有它没有这么难看的语法。

我真的很喜欢Python3.6+中的一个新的文字字符串插值:

1line_new = f"{word[0]:>12} {word[1]:>12} {word[2]:>12}"

参考:PEP 498——文字字符串插值

输出的简单表格:

1

2

3

4a = 0.3333333

b = 200/3

print("variable a variable b")

print("%10.2f %10.2f" % (a, b))

输出:

1

2variable a variable b

0.33 66.67

%10.2f:10为最小长度,2为小数位数。

以下是使用"f-string"格式的另一种方法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25print(

f"{"Trades:":<15}{cnt:>10}",

f"

{"Wins:":<15}{wins:>10}",

f"

{"Losses:":<15}{losses:>10}",

f"

{"Breakeven:":<15}{evens:>10}",

f"

{"Win/Loss Ratio:":<15}{win_r:>10}",

f"

{"Mean Win:":<15}{mean_w:>10}",

f"

{"Mean Loss:":<15}{mean_l:>10}",

f"

{"Mean:":<15}{mean_trd:>10}",

f"

{"Std Dev:":<15}{sd:>10}",

f"

{"Max Loss:":<15}{max_l:>10}",

f"

{"Max Win:":<15}{max_w:>10}",

f"

{"Sharpe Ratio:":<15}{sharpe_r:>10}",

)

这将提供以下输出:

1

2

3

4

5

6

7

8

9

10

11

12Trades: 2304

Wins: 1232

Losses: 1035

Breakeven: 37

Win/Loss Ratio: 1.19

Mean Win: 0.381

Mean Loss: -0.395

Mean: 0.026

Std Dev: 0.56

Max Loss: -3.406

Max Win: 4.09

Sharpe Ratio: 0.7395

您在这里所做的是说,第一列的长度为15个字符,左对齐,第二列(值)的长度为10个字符,右对齐。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值