繁体   English   中英

Python-来自文本文件的列表

[英]Python - list from text file

我正在努力从文本文件中返回一个列表,并将新的用户输入值附加到列表中而不附加现有值。

我在tkinter组合框中使用列表,允许用户键入要添加到列表的新值。 我当前的代码使用一个简单的文本列表,由于查找现有值时每行后面都有'\\ n',因此会引起问题。 它正在寻找键入/选择的值(直到追加到列表后才具有“ \\ n”,而列表中除最后一行以外的所有内容都在其后带有“ \\ n”)。

listFile.txt是一个简单文件:(它是各种配置文件)项目1项目2项目3

我现有的代码是:

from tkinter import *
from tkinter import ttk

listFile = open('listFile.txt','r')

root = Tk()
root.configure()
varItems = StringVar(root, value='')

class MainWindow(Frame):
    def __init__(self,master = None):
        Frame.__init__(self,master)
        self.master = master
        self.grid()
        self.create_widgets()

    def create_widgets(self):
        """Create Window Layout"""
        self.label = Label(self, text="List Items").pack()
        self.itemCombo = ttk.Combobox(self, width = 16, textvariable = varItems)
        self.itemCombo.bind("<Return>", self.itemCombo_onEnter)
        self.itemCombo.bind('<<ComboboxSelected>>',self.itemCombo_onEnter)
        self.itemCombo['values'] = listFile.readlines()
        self.itemCombo.pack()

    def itemCombo_onEnter(self,event):
        varItems.set(varItems.get().lower().strip())
        mytext = varItems.get().strip()
        vals = self.itemCombo.cget('values')
        self.itemCombo.select_range(0,END)
        print(mytext)
        if not vals:
            self.itemCombo.configure(values = (mytext,))
        elif mytext not in vals:
            with open('listFile.txt','a') as f:
                f.write('\n'+ mytext)
                self.itemCombo.configure(values = vals + (mytext,))
                f.close
        return 'break'

app = MainWindow(root)
root.mainloop()

我愿意接受任何建议或变更-非常感谢您的帮助!

在onEnter方法内部,将写入代码更改为:

with open('listFile.txt', 'w') as f:
    self.itemCombo.configure(values=vals + (mytext,))
    f.write("\n".join(vals + (mytext,)))
    f.close()

初始化梅索德变化内listFile.readlines()[l.strip() for l in listFile.readlines()]

另一个更简单的解决方案是仅包含输入的串联版本以匹配文件中的搜索。

mytext = mytext + "\n"
        if not vals:
            self.itemCombo.configure(values = (mytext,))
        elif mytext not in vals:
            with open('listFile.txt','a') as f:
                f.write('\n'+ mytext)
                self.itemCombo.configure(values = vals + (mytext,))
                f.close

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM