Удаление нулевых значений из импорта Python CSV - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть эта программа, над которой я работал.У меня два вопроса.Во-первых, как мне удалить нулевые значения из моих массивов после или до их импорта? Во-вторых, Есть ли лучший способ написать это .Я знаю, что могу делать с ним больше объектно-ориентированного программирования, но, откровенно говоря, я действительно путаю меня прямо сейчас.

######imports python tools need for ui and csv reading 
from tkinter import *
import tkinter as tk
import csv

#####establishes arrays that the lables and scripst are saved in 
smename = []
smescript = []
rname = []
rscript = []
acname = []
acscript = []
tsname = []
tsscript = []

#####pulls infor from csv and imports to arrays
for d in csv.DictReader(open('script.csv')):
     smename.append((d['smename']))
     smescript.append((d['smescript']))
     rname.append((d['rname']))
     rscript.append((d['rscript']))
     acname.append((d['acname']))
     acscript.append((d['acscript']))
     tsname.append((d['tsname']))
     tsscript.append((d['tsscript']))

#####functions for all the option boxes to pull the needed scripts based on the button lable
def index(*entry):
     dex = smename.index(*entry)
     r = Tk()
     r.withdraw()
     r.clipboard_clear()
     r.clipboard_append(smescript[dex])
     r.update() 
     r.destroy()
     tkvar1.set('Start, Middle, & End')

def rindex(*entry):
     dex = rname.index(*entry)
     r = Tk()
     r.withdraw()
     r.clipboard_clear()
     r.clipboard_append(rscript[dex])
     r.update() 
     r.destroy()
     tkvar2.set('Remote')

def acindex(*entry):
     dex = acname.index(*entry)
     r = Tk()
     r.withdraw()
     r.clipboard_clear()
     r.clipboard_append(acscript[dex])
     r.update() 
     r.destroy()
     tkvar3.set('Abandoned Chat?')

def tsindex(*entry):
     dex = tsname.index(*entry)
     r = Tk()
     r.withdraw()
     r.clipboard_clear()
     r.clpboard_append(tsscript[dex])
     r.update() 
     r.destroy()
     tkvar4.set('Troubleshooting Steps')

#####establishes ui infromation and features    
root = tk.Tk()
root.title('HD Tools')
root.attributes("-topmost", True)
frame = tk.Frame(root)
frame.pack(pady = 5, padx = 5)

####simple option box
tkvar1 = StringVar(root)
popupMenu = OptionMenu(frame, tkvar1, *smename, command=index)
popupMenu.configure(width=20)
popupMenu.grid(row = 1, column = 1)
tkvar1.set('Start, Middle, & End')

tkvar2 = StringVar(root)
popupMenu = OptionMenu(frame, tkvar2, *rname, command=rindex)
popupMenu.configure(width=20)
popupMenu.grid(row = 2, column = 1)
tkvar2.set('Remote')

tkvar3 = StringVar(root)
popupMenu = OptionMenu(frame, tkvar3, *acname, command=acindex)
popupMenu.configure(width=20)
popupMenu.grid(row = 3, column = 1)
tkvar3.set('Abandoned Chat?')

tkvar4 = StringVar(root)
popupMenu = OptionMenu(frame, tkvar4, *tsname, command=tsindex)
popupMenu.configure(width=20)
popupMenu.grid(row = 4, column = 1)
tkvar4.set('Troubleshooting Steps')

#####runs the mainloop to start the ui =
root.mainloop()

1 Ответ

0 голосов
/ 25 ноября 2018

Вы можете удалить значения None и false-y из list, используя filter:


>>> rg = [ 'hello', None, None, 'stack', '' ]
>>> rg = list(filter(None, rg))
>>> rg
[ 'hello', 'stack' ]

Самое простое действие, даже без использования объектно-ориентированного программирования,держит ваш код СУХОЙ.Это означает, что если вы видите, что снова и снова используете одни и те же части кода, попробуйте сделать код, который будет повторно использоваться в отдельной функции.Например,


####simple option box
tkvar1 = StringVar(root)
popupMenu = OptionMenu(frame, tkvar1, <b>*smename</b>, command=<b>index</b>)
popupMenu.configure(width=20)
popupMenu.grid(row = <b>1</b>, column = 1)
tkvar1.set(<b>'Start, Middle, & End'</b>)

tkvar2 = StringVar(root)
popupMenu = OptionMenu(frame, tkvar2, <b>*rname</b>, command=<b>rindex</b>)
popupMenu.configure(width=20)
popupMenu.grid(row = <b>2</b>, column = 1)
tkvar2.set(<b>'Remote'</b>)

Эти два блока в основном одинаковы, за исключением нескольких небольших различий.Вы можете объединить их в одну многоразовую функцию:


def add_grid(data, command, title, row):
    var = StringVar(root)
    popupMenu = OptionMenu(frame, var, <b>*data</b>, command=<b>command</b>)
    popupMenu.configure(width=20)
    popupMenu.grid(row = <b>row</b>, column = 1)
    var.set(<b>title</b>)

add_grid(smename, index, 'Start, Middle, & End', 1)
add_grid(rname, rindex, 'Remote', 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...