我正在处理一个包含坐标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个字符,右对齐。