【发布时间】:2018-09-26 14:56:44
【问题描述】:
我正在编写一个脚本,它将一个 csv 文件读取到一个 psql 表中,然后对数据进行排序并将其导出到一个新文件中。如何将导出到 csv 文件的相同数据打印到终端以像表格一样显示?
这是我的代码:
import psycopg2
import pandas as pd
class Products(object):
def __init__(self):
self.db_connection = psycopg2.connect("host=localhost dbname=rd_assignment user=postgres")
self.db_cur = self.db_connection.cursor()
def add_column(self):
"""This method adds a column to the products database table. It checks if the table is empty before
inserting the csv file."""
self.db_cur.execute("ALTER TABLE products ADD COLUMN IF NOT EXISTS is_active BOOLEAN NOT NULL;")
self.db_cur.execute("SELECT COUNT(*) FROM products;")
rows = self.db_cur.fetchall()
if rows[0][0] < 20:
self.db_cur.execute(
"COPY products FROM '/Users/leroy/PycharmProjects/rd_assignment/products.csv' DELIMITERS ',' CSV;")
self.db_connection.commit()
def sort_highest(self):
"""This method outputs the products to a csv file according to the highest amount"""
sort_highest = "COPY (SELECT * FROM products order by amount desc) TO STDOUT DELIMITER ';' CSV HEADER"
with open("highest_amount.csv", "w") as file:
self.db_cur.copy_expert(sort_highest, file)
r = pd.read_csv('/Users/leroy/PycharmProjects/rd_assignment/highest_amount.csv')
print(r.head(20))
def get_active(self):
"""This method outputs the active products in the database to a csv file"""
sort_active = "COPY (SELECT * FROM products WHERE is_active = True) TO STDOUT DELIMITER ';' CSV HEADER"
with open("active_products.csv", "w") as file:
self.db_cur.copy_expert(sort_active, file)
def get_inactive(self):
"""This method outputs the inactive products in the database to a csv file"""
sort_inactive = \
"COPY (SELECT description, amount FROM products WHERE is_active = False) TO STDOUT DELIMITER ';' CSV HEADER"
with open("inactive_products.csv", "w") as file:
self.db_cur.copy_expert(sort_inactive, file)
def __del__(self):
self.db_connection.close()
if __name__ == '__main__':
instance = Products()
instance.add_column()
instance.sort_highest()
instance.get_active()
instance.get_inactive()
导入的 csv 文件如下所示:
101,9/25/2018,9/25/2018,"Sinotec 40"" FHD LED TV",5,TRUE
102,9/25/2018,9/25/2018,Playstation 4 1TB Console - Marvel Spider-man,5,TRUE
103,9/25/2018,9/25/2018,Mellerware - 3.5 Litre Tempo Slow Cooker,6,FALSE
104,9/25/2018,9/25/2018,Samsung Galaxy S9 64GB - Black,12,TRUE
105,9/25/2018,9/25/2018,Cougar Armor Gaming Chair - Black,3,FALSE
106,9/25/2018,9/25/2018,Destiny 2 Legendary Collection(PS4),2,TRUE
107,9/25/2018,9/25/2018,"AIWA 43"" Full HD LED TV",3,FALSE
108,9/25/2018,9/25/2018,Ibanez PF17ECE-LG Acoustic/Electric Guitar,2,FALSE
109,9/25/2018,9/25/2018,Plantronics Audio 355 Stereo headset - Black,6,TRUE
110,9/25/2018,9/25/2018,Speck Presidio Case for Apple iPhone 7/8,6,FALSE
111,9/25/2018,9/25/2018,Skone Langebaan Key Hole UV400 Sunglasses,6,TRUE
112,9/25/2018,9/25/2018,Fadecase Karambit Elite Gamma Doppler Phase 2,6,TRUE
113,9/25/2018,9/25/2018,JBL GO Portable Bluetooth Speaker - Blue,6,TRUE
114,9/25/2018,9/25/2018,"WD Blue 250GB 2.5"" 3D NAND SATA SSD",8,FALSE
115,9/25/2018,9/25/2018,Philips - Metal Kettle - Red,8,TRUE
116,9/25/2018,9/25/2018,Apple AirPods,2,FALSE
117,9/25/2018,9/25/2018,Apple Watch Series 3 GPS 42mm,5,FALSE
118,9/25/2018,9/25/2018,Gigabyte GeForce GTX 1080 G1 Gaming Edition,8,FALSE
119,9/25/2018,9/25/2018,HTC Vive Eco Black VR Goggles (PC),11,FALSE
120,9/25/2018,9/25/2018,Corsair Vengeance LED 32GB Memory Kit - Red,10,TRUE
【问题讨论】:
-
print(r.to_csv()).
标签: python python-3.x csv psql