Python 3.x 用python格式化重复字符串
我有一个代码,可以将Python 3.x 用python格式化重复字符串,python-3.x,format,Python 3.x,Format,我有一个代码,可以将标题、分隔符和数据作为列表,或者在数据作为列表的情况下。在我展示的示例中,每个列表中有4个字符串;但是,这可能因运行而异。我想以列格式将数据写入命令提示符,但遇到问题。下面是我的代码示例 headers = ['id', 'Date', 'Column1', 'Column2'] dividers = ['-' * len(headers) for i in range(len(headers))] data = [['1', '2017-01-18', '7.7132064
标题
、分隔符
和数据
作为列表,或者在数据
作为列表的情况下。在我展示的示例中,每个列表中有4个字符串;但是,这可能因运行而异。我想以列格式将数据写入命令提示符,但遇到问题。下面是我的代码示例
headers = ['id', 'Date', 'Column1', 'Column2']
dividers = ['-' * len(headers) for i in range(len(headers))]
data = [['1', '2017-01-18', '7.71320643266746', 'Gas'],
['2', '2017-01-13', '0.207519493594015', 'Groceries',
['3', '2017-01-18', '6.336482349262754', 'Groceries']
我正在尝试用以下格式打印数据
fmat = '{15s}' * len(headers)
print(fmat.format(*headers))
print(fmat.format(*dividers))
for i in range(len(data)):
print(fmat.format(*data[i))
虽然不在编码中,但我还希望在每列之间填充一个空格,每个空格不应超过15列。换句话说,我希望输出像这样
id Date Column2 Column3
-- ---- ------- -------
1 2017-01-18 7.7132064326674 Gas
2 2017-01-13 0.2075194935940 Groceries
3 2017-01-18 6.3364823492627 Groceries
id Date Column2 Column3
-- ---- ------- -------
1 2017-01-18 7.71320643266746Gas
2 2017-01-13 0.207519493594015Groceries
3 2017-01-18 6.336482349262754Groceries
不幸的是,输出是这样的
id Date Column2 Column3
-- ---- ------- -------
1 2017-01-18 7.7132064326674 Gas
2 2017-01-13 0.2075194935940 Groceries
3 2017-01-18 6.3364823492627 Groceries
id Date Column2 Column3
-- ---- ------- -------
1 2017-01-18 7.71320643266746Gas
2 2017-01-13 0.207519493594015Groceries
3 2017-01-18 6.336482349262754Groceries
如您所见,
Column2
不是以15个字符结尾,而是溢出到Column3
中。如何设置此问题的格式,使列在15处停止,并允许在每列之间填充1个字符?我试图将解决方案保留为8列或3列等情况的通用解决方案。您可以通过以下方式使用格式:
headers = ['id', 'Date', 'Column1', 'Column2']
dividers = ['-' * len(headers) for i in range(len(headers))]
data = [['1', '2017-01-18', '7.71320643266746', 'Gas'],
['2', '2017-01-13', '0.207519493594015', 'Groceries'],
['3', '2017-01-18', '6.336482349262754', 'Groceries']]
row_format ="{:<20}" * (len(headers))
print (row_format.format(*headers))
print (row_format.format(*dividers))
for row in data:
print (row_format.format(*row))
headers=['id','Date','Column1','Column2']
除数=['-'*len(标题)表示范围内的i(len(标题))]
数据=['1','2017-01-18','7.71320643266746','Gas'],
[2',2017-01-13',0.207519493594015','Groceries'],
['3','2017-01-18','6.336482349262754','Groceries']
row_format=“{:您可以通过以下方式使用格式:
headers = ['id', 'Date', 'Column1', 'Column2']
dividers = ['-' * len(headers) for i in range(len(headers))]
data = [['1', '2017-01-18', '7.71320643266746', 'Gas'],
['2', '2017-01-13', '0.207519493594015', 'Groceries'],
['3', '2017-01-18', '6.336482349262754', 'Groceries']]
row_format ="{:<20}" * (len(headers))
print (row_format.format(*headers))
print (row_format.format(*dividers))
for row in data:
print (row_format.format(*row))
headers=['id','Date','Column1','Column2']
除数=['-'*len(标题)表示范围内的i(len(标题))]
数据=['1','2017-01-18','7.71320643266746','Gas'],
[2',2017-01-13',0.207519493594015','Groceries'],
['3','2017-01-18','6.336482349262754','Groceries']
row_format=“{:您的代码让我陷入了一个循环,有一些输入错误,与预期结果不匹配,但我想我已经找到了答案
@Gordon的解决方案应该适合您,但如果您想保持原始代码的精神,则应将fmat
行更改为:
fmat = '{:15.15} ' * len(headers)
快速的谷歌搜索让我找到了.format
。简言之,:15
表示至少填充15个空格,而.15
表示最多截断15个字符
您可能还希望将分隔符
行更新为以下内容:
dividers = ['-' * len(i) for i in headers]
显示的代码只返回了--
4次,而不是与列长度匹配的-
结果是:
id Date Column1 Column2
-- ---- ------- -------
1 2017-01-18 7.7132064326674 Gas
2 2017-01-13 0.2075194935940 Groceries
3 2017-01-18 6.3364823492627 Groceries
你的代码让我陷入了一个循环,有一些拼写错误,与预期的结果不匹配,但我想我找到了答案
@Gordon的解决方案应该适合您,但如果您想保持原始代码的精神,则应将fmat
行更改为:
fmat = '{:15.15} ' * len(headers)
快速的谷歌搜索让我找到了.format
。简言之,:15
表示至少填充15个空格,而.15
表示最多截断15个字符
您可能还希望将分隔符
行更新为以下内容:
dividers = ['-' * len(i) for i in headers]
显示的代码只返回了--
4次,而不是与列长度匹配的-
结果是:
id Date Column1 Column2
-- ---- ------- -------
1 2017-01-18 7.7132064326674 Gas
2 2017-01-13 0.2075194935940 Groceries
3 2017-01-18 6.3364823492627 Groceries
不幸的是,这种方法假设事先知道需要格式化多少列。在本例中,我有4列,但函数可以允许将任意数量的列输入函数,并且代码必须足够智能,以便知道如何为每种情况格式化输出。此解决方案并不比我使用的解决方案好rst.如果我将长度缩小到15,那么Column1仍然占据超过15列,当我指定new\u行时,它不应该这样做={:忽略我之前的评论,我看到你对你的回复做了更改。我认为现在效果很好。谢谢你的指导。实际上我收回了我以前的评论。这个解决方案仍然会导致第3列超过15列。如果我转到20列,就有空间,但尽管如此,我需要该列停在15列,并且仍然有一个spac每个列之间都有一个字符串。@Jon是的,没关系。虽然我没有详细阅读你的问题,但我只是写了一些代码来说明你可以用这种方式使用字符串格式。:)不幸的是,这种方式假设事先知道需要格式化多少列。在这种情况下,我有4列,但函数可以允许任何数字要输入函数的列的数量,代码必须足够聪明,知道如何为每种情况设置输出格式。此解决方案并不比我首先使用的解决方案好。如果我将长度缩小到15,则Column1仍会占用超过15列,这在我指定new\u行时是不应该的={:忽略我之前的评论,我看到你对你的回复做了更改。我认为现在效果很好。谢谢你的指导。实际上我收回了我以前的评论。这个解决方案仍然会导致第3列超过15列。如果我转到20列,就有空间,但尽管如此,我需要该列停在15列,并且仍然有一个spac每列之间都有一个字符串。@Jon是的,没关系。虽然我没有详细阅读你的问题,但我只是写了一些代码来说明你可以用这种方式使用字符串格式。:)