簡體   English   中英

如何從python的輸出中刪除大括號?

[英]How to remove curly bracket from the output in python?

我是 Python 新手,我最近 1 周前開始學習,但我被困在這里......任何幫助將不勝感激......

from tkinter import *
import tkinter as tk
import psycopg2

root = Tk()

def get_info(Employee_Name, Department, Education,Salary):
   con = psycopg2.connect(dbname = 'postgres',user = 'postgres',password = 'Gaurav@31',host = 'localhost',port = 5432)
   cur = con.cursor()
   query = ('''INSERT INTO Employee (Employee_name, Department, Education,Salary) VALUES (%s,%s,%s,%s);''' )
   cur.execute(query,(Employee_Name, Department, Education,Salary))
   print('Data inserted Successfully')
   con.commit()
   con.close()
   display_all()

def search(emp_id):
    con = psycopg2.connect(dbname = 'postgres',user = 'postgres',password = 'Gaurav@31',host = 'localhost',port = 5432)
    cur = con.cursor()
    query = ('''SELECT * FROM EMPLOYEE WHERE emp_id = %s;''' )
    cur.execute(query,(emp_id))
    row = cur.fetchone()
    display_search(row)
    con.commit()
    con.close()

def display_search(row):
    listbox = Listbox(frame, width =50 , height=1)
    listbox.grid(row = 9 , column =1)
    listbox.insert(END,row)

def display_all():
    con = psycopg2.connect(dbname = 'postgres',user = 'postgres',password = 'Gaurav@31',host = 'localhost',port = 5432)
    cur = con.cursor()
    query = ('''SELECT * FROM Employee;''' )
    cur.execute(query)
    row = cur.fetchall()

    listbox = Listbox(frame, width =50 , height=8)
    listbox.grid(row = 10 , column =1)

    for x in row:
        listbox.insert(END,x)

canvas = Canvas(root, height = 480, width = 900)
canvas.pack()

frame = Frame()
frame.config(background="Black")
frame.place(relx = 0, rely = 0, relwidth = 1, relheight = 1)

label = Label(frame,text = " Employee Database")
labelfont = ('times', 24, 'bold')
label.config(bg = 'Black',fg ='Yellow',font =labelfont)
label.grid(row=0,column=1,sticky = N)


label = Label(frame, text = 'Employee Name : ')
labelfont1 = ('times', 18, 'bold')
label.config(bg = 'Black',fg ='Yellow',font =labelfont1)
label.grid(row =1, column = 0,sticky='w')
entry_name = Entry(frame,width = 30)
entry_name.grid(row = 1, column= 1)

label = Label(frame, text = 'Department : ')
labelfont1 = ('times', 18, 'bold')
label.config(bg = 'Black',fg ='Yellow',font =labelfont1)
label.grid(row =2, column = 0, sticky ='w')
dept_name = Entry(frame,width = 30)
dept_name.grid(row = 2, column= 1)

label = Label(frame, text = 'Education : ')
labelfont1 = ('times', 18, 'bold')
label.config(bg = 'Black',fg ='Yellow',font =labelfont1)
label.grid(row =3, column = 0,sticky ='w')
education = Entry(frame,width = 30)
education.grid(row = 3, column= 1)

label = Label(frame, text = 'Salary : ')
labelfont1 = ('times', 18, 'bold')
label.config(bg = 'Black',fg ='Yellow',font =labelfont1)
label.grid(row =4, column = 0, sticky ='w')
salary = Entry(frame,width = 30)
salary.grid(row = 4, column= 1)

button = Button(frame, text = 'Add Information', command=lambda:         get_info(entry_name.get(),dept_name.get(),education.get(),salary.get()))
buttonfont1 = ('times', 13, 'bold')
button.config(bg = 'Black',fg ='Yellow',font =buttonfont1)
button.grid(row = 5 , column= 1)

label = Label(frame, text = 'Search by Emp_id : ')
labelfont1 = ('times', 14, 'bold')
label.config(bg = 'Black',fg ='Yellow', font =labelfont1)
label.grid(row = 6, column = 0, sticky ='w')
id_search = Entry(frame,width = 30)
id_search.grid(row = 6, column= 1)

button = Button(frame, text = 'Search',command = lambda:     search(id_search.get()))
buttonfont1 = ('times', 13, 'bold')
button.config(bg = 'Black',fg ='Yellow',font =buttonfont1)
button.grid(row = 7 , column= 1)

display_all()

root.mainloop()

請找到附加的代碼以及屏幕截圖:

我將刪除列表框中可見的大括號,以及我希望以表格形式打印

在此處輸入圖片說明

您正在將列表或元組而不是字符串插入到列表框中。 在傳遞給插入方法之前,您需要將每一行顯式轉換為字符串。 否則,底層 tcl 解釋器將嘗試通過在將值轉換為字符串時添加花括號或反斜杠來保留數據的類似列表的結構。

考慮這個代碼:

query = ('''SELECT * FROM Employee;''' )
cur.execute(query)
row = cur.fetchall()

row列表列表。 對於row每個項目,您都有該行中每一列的值列表。

稍后,您將每一行添加到列表框中,如下所示:

for x in row:
    listbox.insert(END,x)

如前所述, x是每列的數據列表。 但是, listbox.insert需要一個字符串。 由於它不是字符串,tkinter 將使用其自己的邏輯將其轉換為字符串,這可能會導致添加花括號。

為避免這種情況,您應該在調用insert之前將列表顯式轉換為字符串。 最簡單的方法是在每個元素之間添加一個空格:

listbox.insert(END, " ".join(x))

如果“x”包含字符串以外的內容,則需要先將它們轉換為字符串。 最終版本可能如下所示:

string_data = [str(data) for data in x]
listbox.insert(END, " ".join(string_data))

布萊恩的解釋非常有幫助!!! 但是,當我使用建議的代碼時,

string_data = [str(data) for data in x]
listbox.insert(END, " ".join(string_data))

我的輸出是一條長線。 所以我添加了一個for循環,

item = [str(data) for data in backend.view()]
for x in item:
    lb.insert(END, "".join(x)) # don't include space between quotes

它看起來好一點。 我也嘗試過更多的代碼,這也很好用,

for item in backend.view():
    lb.insert(END, "{}".format(item))

它與 Bryan 建議的代碼相同,除了我使用格式而不是連接。

不管怎樣,非常感謝! 這非常有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM