如何在 Python 中使用 Pretty Table 打印多个列表中的数据?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/36423259/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to use Pretty Table in Python to print out data from multiple lists?
提问by mabishi
I'm relatively new to Python Programming, using Python 3.x, and am working on a Barbershop P.O.S system where the admin will have the privilege to add Services and their corresponding Prices. I'm using the Pretty Table library to achieve printing out a table with serviceID, service and price.
我对 Python 编程比较陌生,使用 Python 3.x,并且正在 Barbershop POS 系统上工作,管理员将有权添加服务及其相应的价格。我正在使用 Pretty Table 库来实现打印出带有 serviceID、service 和 price 的表。
Here's my code:
这是我的代码:
from prettytable import PrettyTable
import random
serviceID = []
services = []
price = []
x = PrettyTable()
x.add_column("ServiceID",[serviceID])
x.add_column("Service", [services])
x.add_column("Price", [price])
while True:
try:
ID = random.randint(1,90000) #range high to lower probability of non-uniqueness
serviceID.append(ID) #Generates unique ID for each service
prompt1 = input("Please add a service name to the list\n")
services.append(prompt1)
prompt2 = input("Please enter a price for the service\n")
prompt2 == int(prompt2)
price.append(prompt2)
print(x)
except ValueError:
print("Please enter valid type")
continue
When I enter the first service and Price, the output is:
当我输入第一个服务和价格时,输出是:
+-----------+---------+--------+
| ServiceID | Service | Price |
+-----------+---------+--------+
| [9880] | ['box'] | ['90'] |
+-----------+---------+--------+
When I enter the 2nd service and price, the output is this:
当我输入第二个服务和价格时,输出是这样的:
+---------------+-----------------+--------------+
| ServiceID | Service | Price |
+---------------+-----------------+--------------+
| [9880, 47612] | ['box', 'trim'] | ['90', '80'] |
+---------------+-----------------+--------------+
I'd like the output to be this:
我希望输出是这样的:
+---------------+-----------------+--------------+
| ServiceID | Service | Price |
+---------------+-----------------+--------------+
| 9880 | box | 90 |
| 47612 | trim | 80 |
+---------------+-----------------+--------------+
Does anyone know how to achieve this? Any help would be appreciated.
有谁知道如何实现这一目标?任何帮助,将不胜感激。
回答by Vivek Sable
We can do by adding row into PrettyTable
object by add_row
method.
我们可以PrettyTable
通过add_row
方法将行添加到对象中来完成。
Demo:
演示:
>>> from prettytable import PrettyTable
>>> import random
>>>
>>> x = PrettyTable(["ServiceID", "Service", "Price"])
>>>
>>> while True:
... #- Get value
... ID = random.randint(1,90000) #range high to lower probability of non-uniqueness
... prompt1 = raw_input("Please add a service name to the list\n")
... try:
... #- Type Casting.
... prompt2 = int(raw_input("Please enter a price for the service\n"))
... except ValueError:
... print("Please enter valid type")
... continue
... #- Add row
... x.add_row([ID, prompt1, prompt2])
... #- Ask user to Continue or not.
... choice = raw_input("Continue yes/ no:").lower()
... if not(choice=="yes" or choice=="y"):
... break
...
Please add a service name to the list
2
Please enter a price for the service
3
Continue yes/ no:y
Please add a service name to the list
4
Please enter a price for the service
6
Continue yes/ no:y
Please add a service name to the list
5
Please enter a price for the service
7
Continue yes/ no:n
>>> print x
+-----------+---------+-------+
| ServiceID | Service | Price |
+-----------+---------+-------+
| 38515 | 2 | 3 |
| 8680 | 4 | 6 |
| 51188 | 5 | 7 |
+-----------+---------+-------+
>>>
Delete Row:
删除行:
Use del_row()
method. We need to pass index of row which we want to remove.
使用del_row()
方法。我们需要传递要删除的行的索引。
>>> print x
+-----------+---------+-------+
| ServiceID | Service | Price |
+-----------+---------+-------+
| 38515 | 2 | 3 |
| 8680 | 4 | 6 |
| 51188 | 5 | 7 |
+-----------+---------+-------+
>>> x.del_row(1)
>>> print x
+-----------+---------+-------+
| ServiceID | Service | Price |
+-----------+---------+-------+
| 38515 | 2 | 3 |
| 51188 | 5 | 7 |
+-----------+---------+-------+
Need to handle exception if we provide index value greater then total rows in exception will raise, that need to handle in ur code.
如果我们提供的索引值大于异常中的总行数,则需要处理异常,这需要在您的代码中处理。
Exception is:
例外是:
>>> x.del_row(10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/prettytable.py", line 832, in del_row
raise Exception("Cant delete row at index %d, table only has %d rows!" % (row_index, len(self._rows)))
Exception: Cant delete row at index 10, table only has 2 rows!
Note:
注意:
Use
raw_input()
for Python 2.xUse
input()
for Python 3.x
使用
raw_input()
Python的2.X使用
input()
Python的3.x的
回答by janus-py
I've accomplished that by always creating a new instance of the class prettytable
.PrettyTable inside the while
loop.
我通过始终prettytable
在while
循环内创建类.PrettyTable的新实例来实现这一点。
from prettytable import PrettyTable
import random
serviceID = []
services = []
price = []
while True:
try:
x = PrettyTable()
ID = random.randint(1,90000) #range high to lower probability of non-uniqueness
serviceID.append(ID) #Generates unique ID for each service
prompt1 = input("Please add a service name to the list\n")
services.append(prompt1)
prompt2 = input("Please enter a price for the service\n")
prompt2 == int(prompt2)
price.append(prompt2)
x.add_column("ServiceID", serviceID)
x.add_column("Service", services)
x.add_column("Price", price)
print(x)
except ValueError:
print("Please enter valid type")
continue
Here is my version of code using methods field_names()
and add_row()
.
这是我使用方法field_names()
和add_row()
.
from prettytable import PrettyTable
import random
serviceID = []
services = []
price = []
x = PrettyTable()
x.field_names = ["ServiceID", "Service", "Price"]
while True:
try:
ID = random.randint(1,90000) #range high to lower probability of non-uniqueness
serviceID.append(ID) # in order to store new value if you will need it later
prompt1 = input("Please add a service name to the list\n")
services.append(prompt1) # in order to store new value if you will need it later
prompt2 = input("Please enter a price for the service\n")
prompt2 == int(prompt2)
services.append(prompt2) # in order to store new value if you will need it later
x.add_row([ID, prompt1, prompt2])
print(x)
except ValueError:
print("Please enter valid type")
continue