python - 访问正在更新的变量

标签 python csv

我有一个监视 csv 文件的函数。它迭代 csv 文件中的所有行并返回每一行,等待文件更新,如果更新,则返回新值。它是这样的:

def follow():
    file_path = filedialog.askopenfilename()
    with open(file_path) as csvDataFile:
        csvReader = csv.reader(csvDataFile)
        csvDataFile.seek(0,0)
        while True:
            line = csvDataFile.readline()
            if not line:
                time.sleep(0.5)
                continue
            yield line

我这样做是为了一个图形用户界面。我有一个按钮,按下该按钮会加载 csv 文件并调用此函数。它将每一行保存到一个作为成员变量的列表中。

def browseForFile(self):
        line = pull_csv_data.follow()
        for item in line:
            self.list.append(item)

当按下另一个按钮时,它会遍历该列表并在 GUI 上显示信息:

def listItems(self):
    for i in self.list:
        time.sleep(0.1)
        item = QListWidgetItem(i)
        self.prev_scenes.addItem(item)

问题是,每当我单击按钮来显示列表中的数据时,它就会停止响应,直到我杀死具有 follow() 函数的 python 脚本。为了澄清起见,follow 函数位于一个单独的文件中,我将其包含在我的“主”文件中。

本质上..我认为,follow 函数不允许其他进程同时运行。真的吗?有解决方法吗?或者有更好的方法吗?

最佳答案

follow 函数与 main 函数处于同一进程中。因此,当您的 follow 函数休眠时,您的整个程序也会休眠。如果您希望异步运行,则必须明确指定。

您可能应该使用类似 https://pythonhosted.org/watchdog/index.html 的内容或https://github.com/seb-m/pyinotify/wiki而不是尝试编写自己的文件处理函数。

关于python - 访问正在更新的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47272037/

相关文章:

python - 当进程在 python 中完成时,有什么方法不调用类的析构函数吗?

MySQL 查询 CSV 输出不是文件

sql - MySQL - 如何按值将子查询用于 IN 语句

python - 将 numpy 数组写入具有特定列数的 csv 文件

python - 如何使用 python regex 将正则表达式与其中的一个数字完全匹配?

python - Tensorflow in_top_kv

python - 如何获取paypal的交易信息

python - 使用带有 TEMPLATE.format() 的字典时出现关键错误

mysql - LOAD DATA INFILE 在 BASH SCRIPT 中不起作用

python - 将 defaultdict(list) 保存到 csv 文件