CSV文件显示字符串输入

jum4pzuy  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(159)

我创建了一个Tkinter应用程序来将数据存储在CSV文件中。代码如下:

def add_file():
    global msg
    msg = entry.get()
    print(msg)
    if msg != '':
        listbox_tasks.insert(END, msg)
        entry.delete(0, END)
    else:
        messagebox.showinfo('Info', 'Please Fill In The Entry Box!')

def save_file(msg):
    with open('hello.csv', 'a', newline='') as f:
        writer = csv.writer(f, quotechar='"', quoting=csv.QUOTE_ALL)
        writer.writerow([msg])
    messagebox.showinfo('Info', 'Message Saved!')

scrollbar_tasks = Scrollbar(root)
scrollbar_tasks.pack(side=RIGHT, fill=Y)

listbox_tasks = Listbox(root, yscrollcommand=scrollbar_tasks.set, height=12, width=32, 
                         font=('Helvatica', 18))
listbox_tasks.pack(pady=20)

entry = Entry(label_frame1, font=('Helvatica', 18))
entry.grid(row=0, column=1)

my_create = Button(label_frame2, text='Add File', 
                   font=('Helvatica', 15), command=add_file)
my_create.grid(row=0, column=0, pady=10, padx=10)

my_entry = Button(label_frame2,  text='Save File', bg='green', fg='#ffffff',
                   font=('Helvatica', 15), command=lambda:save_file(msg))
my_entry.grid(row=1, column=0, pady=10, padx=10)

当我输入1,苹果在条目和点击保存文件按钮,在我的CSV文件显示为“1,苹果”而不是1,“苹果”。
我怎么能把绳子扯下来呢?

vatpfxk5

vatpfxk51#

这个writer函数拆分十进制数据(不带引号)和其他数据(带引号)。
这就是writer函数:

decimals = {'0','1','2','3','4','5','6','7','8','9','.'}
def save_file(msg):
    with open('hello.csv', 'a', newline='') as f:
        msg += ","#ending char
        formatted = ''
        quote = False
        block = ''
        for i in msg:
            if i not in decimals:
                if i != ",":
                    quote = True
                    block += i
                else:
                    if quote:
                        block = '"'+block+'"'
                    formatted += block
                    formatted += ','
                    #new block
                    quote = False
                    block = ''
            else:
                block += i
        formatted = formatted[:-1]#remove ending char
        f.write(formatted+"\n")
        
    messagebox.showinfo('Info', 'Message Saved!')

当我使用这个:

msg = "2,gerry,2.2,erderrer,42.0,22hellohelloh4llo,123.456789"
save_file(msg)

我在csv文件中得到这个:

2,"gerry",2.2,"erderrer",42.0."22helloh4llo",123.456789

该行以换行符结尾。

相关问题