2016-11-15 216 views
0

所以我有一个CSV文件,它有三列。我可以读取CSV文件,表格的每一行都是一个列表。但是,当我尝试将它们打印为一张表格时,由于文本的长度不同,所以它们没有正确对齐。我相信我必须用%来格式化它们,但我不知道如何使它工作。 我有更多的行,但由于显而易见的原因,我会只显示第3CSV到Python,文本对齐

North America   USA   Washington 
Europe  Republic of Ireland Dublin 
Asia China  Beijing 

This is how my lists look like: 
["North America"," USA", "Washington"] 
["Europe"," Republic of Ireland", "Dublin"] 
["Asia"," China", "Beijing"] 

弄成这个样子:

North America   USA      Washington 
Europe    Republic of Ireland  Dublin 
Asia     China      Beijing 

我不想使用prettyprint或similiar库,因为我相信这个问题的解决方案对我更有利,所以我可以理解事情的工作方式。

+0

[我怎样才能用空格填充Python字符串?](http:// stackoverflow。com/questions/5676646/how-can-i-fill-a-python-string-with-spaces) – mattsap

+0

使用python中的标签“\ t” – Maddy

+0

@Mani Tab由于长度不同会不起作用 –

回答

4

使用ljust()

可以使用ljust()功能(串)。

ljust将从右侧填充空格(如果指定了任何其他字符)。
用法示例:

>>> 'hello'.ljust(10) 
'hello  ' 
>>> 'hello'.ljust(10, 'A') 
'helloAAAAA' 

所以,当你打印值,只是垫他们使用ljust

假设有a - 列出一个清单,其中包含你的价值观:

for b in a: 
    for c in b: 
     print c.ljust(15), 
    print "" 

使用format

你可以使用字符串format功能用于这一目的:

>>> '{:10}'.format('hello') 
'hello  ' 

标准格式说明符的一般格式为:

format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type] 
fill  ::= <any character> 
align  ::= "<" | ">" | "=" | "^" 
sign  ::= "+" | "-" | " " 
width  ::= integer 
precision ::= integer 
type  ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%" 

另一种方法是使用字符串format

>>> '{text: <10}'.format(text='hi') 
'hi  ' 

使用slicing

那么,它可能被认为是更优雅或Python化(??)使用该方法,但我不亲自喜欢它(?):

>>> ('hello' + 10 * ' ')[:10] 
'hello  ' 

使用打印格式

你可以打印时使用百分比符号,用于格式化C风格的printf文件...

没关系,这不是一个好主意。去别的地方看看吧!