我有一个大的csv文件要编辑(数万行),任务是编辑它'友好'和快速, 所以我想用PyQt的QTableView来保存它,还需要一些过滤器,基本上我需要做一些“update price=200 where name='Jack'”操作
我已经想出了一些选择,但不知道我们是否可以将优势结合起来
更新:代码在工作站上,不能接触互联网,我会写的 请改为psudo代码,抱歉
1、导入本地sqlite
它到磁盘的时间超过一分钟,内存少于10秒,使用QSqlTableModel,速度相对较快,添加过滤器也很容易,直到滚动输出才会完全显示出来,这很好
# use pyqt and sqlite
fh = open("path/to/csv/file")
query = QSqlQuery()
query.prepare("""insert into table""")
for line in fh:
id, name, price = line.split(",")
query.bindValue()
query.exec()
self.view = QTableView()
self.model = QSqlTableModel()
self.model.setTable(table)
self.view.setModel(self.model)
# some line edit gather pattern input
self.model.setFilter("id = 1003")
2,只需将csv解析为模型和显示,我引用了 pyqt - populating QTableWidget with csv data回答用户1006989
把cell放到QStandardItem中,模型/视图运行良好,但是加载大文件太慢(这里大约20秒),而且不知道如何实现过滤器(如果加载到模型中时跳过,我如何写回数据)
3,命令行替换
我已经实现了选项1和选项2,这不是很快,但可能是可以接受的,这里我想知道编写一个类似Perl的regex替换是否有帮助(我们需要先看看它的原始值)
拟定工作流程为
regex search==A>;在表/模型中显示/填充==B>;accept edit==C>; 准备正则表达式替换
^{pr2}$它提出了一个解决方案,我不必将全部内容加载到数据库或填充到widget中,这应该更快,同时还配备了过滤器, 但我在==C>
如果filter gots 4记录,我编辑其中一个,只需备份过滤器结果,然后diff,然后准备一个整行的序言?(每行都是唯一的,里面有一些主键,不会改变)
希望有人能回顾一下我的想法或者给我一些建议
非常感谢您抽出时间:)
最后我做了第三种方法,但是'grep files into a small result'也是在python中做的,因为它是windows
它的速度更快,grep不到1秒,每更改一行就剩2秒,仍然没有一个好的方法在文件中进行多次替换
这意味着在当前版本中,如果
^{pr2}$我必须循环整个大文件为B>;B1,即使只有一个匹配项,然后D1和E1,应该有一个更复杂的regex替换
相关问题 更多 >
编程相关推荐