- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编写了一个程序,可以遍历目录,将文件移动到存档中,并且能够排除某些路径。它可以工作,但速度很慢。
我找不到有效地与 ttk.Treeview 中的项目交互的方法,因此它构建了树和字典,该字典使用 Treeview 中的索引作为键,目录名称作为值。
关于如何加快此过程有什么想法吗?
现在,在一个大小合适的文件夹中构建目录树大约需要 3 分钟,在测试模式下打印新位置还需要 3 分钟。
我的代码:
import tkFileDialog, os, ttk, checkage, logging, shutil
from Tkinter import *
import profile
source = ''
dest = ''
#Build UI
class Master(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def initUI(self):
self.parent.title("pyRchive")
self.pack(fill=BOTH, expand=1)
lSrc = Label(self, text="Choose Source Directory")
lSrc.grid(column = 0, row = 0, padx = 2, pady = 2, sticky=NW)
eSrc = Entry(self, bd=5, width=50)
eSrc.grid(column = 0, row = 0, padx = 5, pady = 5, sticky=SW)
bSrc = Button(self, text="Browse...", command=lambda: choosedir(eSrc))
bSrc.grid(column = 1, row = 0, padx = 5, pady = 5, sticky=SW)
bAdd = Button(self, text="Add", command=lambda: buildTree(self))
bAdd.grid(column = 0, row = 1, padx = 5, pady = 5, sticky=NW)
lDest = Label(self, text="Choose Destination Directory")
lDest.grid(column = 0, row = 2, padx = 5, pady = 5, sticky=NW)
eDest = Entry(self, bd=5, width=50)
eDest.grid(column = 0, row = 2, padx = 2, pady = 5, sticky=SW)
bDest = Button(self, text="Browse...", command=lambda: choosedir(eDest))
bDest.grid(column = 1, row = 2, padx = 2, pady = 5, sticky=SW)
bExec = Button(self, text="Archive Files", command=lambda: archive(self))
bExec.grid(column = 0, row = 3, padx = 2, pady = 5, sticky=NW)
bDel = Button(self, text="Remove Directory", command=lambda: deldir(self))
bDel.grid(column = 1, row = 9, padx = 5, pady = 5, sticky=SE)
tree = ttk.Treeview(self, height=20)
tree.column("#0", width=400)
tree.grid(column = 2, row = 0, padx = 5, pady = 5, rowspan=10, sticky=NSEW)
ysb = ttk.Scrollbar(orient=VERTICAL, command=tree.yview)
tree['yscroll'] = ysb.set
ysb.grid(in_=self, column = 3, row=0, sticky=NS, rowspan=10)
rootlst = {}
#Display Directory when bBrowse is pressed
def choosedir(text):
logging.info('Adding Directory to %s' %(text))
rootfolder = tkFileDialog.askdirectory()
text.insert(0, os.path.abspath(rootfolder))
#Build the Directory Tree
def buildTree(self):
logging.info('Building Directory Tree')
rootfolder = eSrc.get()
global source
source = rootfolder
create_root(rootfolder)
for root, dirs, files in os.walk(rootfolder):
for i in rootlst:
if os.path.split(root)[0] == rootlst[i]:
logging.info('Adding %s to directory tree' %(root))
rt = tree.insert(i, 'end', text='\\' + os.path.basename(root))
rootlst[rt] = root
break
eSrc.delete(0, 'end')
#print tree.get_children()
#Make root level of tree
def create_root(root):
logging.info('Adding the root directory (%s) to the tree' %(root))
rt = tree.insert('', 'end', text=root)
rootlst[rt] = root
#Archive the files in the selected directories
def archive(self):
logging.info('Starting Archive Process')
dest = eDest.get()
if os.path.isdir(source):
for i in rootlst:
for fname in os.listdir(rootlst[i]):
oldname = os.path.join(rootlst[i], fname)
if os.path.isfile(oldname):
logging.info('fname is a file')
if checkage.check(oldname):
logging.info('fname is older than 3 years')
newname = oldname.replace(source, dest)
logging.info('Moving %s to %s' %(oldname, newname))
print newname
else:
pass
#put a message box here for invalid Destination Directory
#Remove Directories from tree
def deldir(self):
selected = tree.selection()
sel = []
for i in selected:
path = rootlst[i]
print 'Delete ', tree.item(i, 'text'), ' and all sub directories'
print path
tree.delete(i)
for i in rootlst:
if rootlst[i].startswith(path):
sel.append(i)
for i in sel:
del rootlst[i]
for i in rootlst:
print i
def main():
logging.basicConfig(filename='pyRchive.log', format='%(asctime)s %(message)s',
datefmt='%m/%d/%Y %I:%M:%S %p', level=logging.INFO)
logging.info('Starting Application')
root = Tk()
app = Master(root)
root.mainloop()
if __name__ == '__main__':
main()
最佳答案
不要使用os.walk
;相反,使用 os.listdir 来获取第一级条目,然后构建您的树,并且仅根据需要(当用户选择目录时)执行所需目录的另一个 os.listdir 并显示其内容等。
您根据用户的操作对目录内容进行惰性评估而不是提前做一个大的结构。
关于python - 加速这个 Python 脚本的想法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20571264/
我想在我的 iPhone 应用程序中加入线性回归。经过一些搜索,我发现 Accelerate Framework 中的 LAPACK 和 BLAS 是正确的库。但是我很难将加速框架添加到我的 XCod
有什么方法可以加速 JS 脚本(我指的是一些复杂的 DOM 操作,比如游戏或动画)? 最佳答案 真的没有办法真正加快速度。您可以压缩它,但不会快很多。 关于Javascript 加速?,我们在Stac
有时,我必须为一个项目重新导入数据,从而将大约 360 万行读入 MySQL 表(目前是 InnoDB,但我实际上并不局限于这个引擎)。 “加载数据文件...”已被证明是最快的解决方案,但它有一个权衡
在尝试计算加速时,我被卡住了。所以给出的问题是: 问题 1 如果程序的 50% 增强了 2 倍,其余 50% 增强了 4 倍,那么由于增强而导致的整体加速是多少? Hints:考虑增强前(未增强)机器
目前我正在处理实时绘图,但可视化非常慢。我想知道你可以做些什么来加速 Matplotlib 中的事情: 后端如何影响性能?是否有后端 实时绘图比其他人更好吗? 我可以降低分辨率以提高 FPS 吗? 如
我有一个小型测试框架。它执行一个循环,执行以下操作: 生成一个小的 Haskell 源文件。 使用 runhaskell 执行此操作.该程序生成各种磁盘文件。 处理刚刚生成的磁盘文件。 这种情况发生了
这是我的网站:Instant-YouTube 如您所见,加载需要很长时间。在 IE8 及以下甚至有时会导致浏览器崩溃。我不确定是什么原因造成的。可能是 Clicksor 广告,但我认为是 swfobj
是否可以加速 SKSpriteNode? 我知道可以使用 node.physicsBody.velocity 轻松设置速度但是设置它的加速度有多难? 最佳答案 从牛顿第二定律倒推运动:F = m.a您
有没有人有加速 FCKEditor 的技术?是否有一些关键的 JavaScript 文件可以缩小或删除? 最佳答案 在最新版本 (3.0.1) 中,FCKEditor 已重命名为 CKEditor .
我有以下 MySQL 查询,需要一天多的时间才能执行: SELECT SN,NUMBER FROM a WHERE SN IN (SELECT LOWER_SN FROM b WHER
我现在正在开发一款使用加速来玩的游戏。我找到了如何让我的元素移动,但不改变它的“原点”,或者更准确地说,改变加速度计算的原点: 事实上,我的图像是移动的,它的中心是这样定义的: imageView.c
我有一个 mysql 表,其中存储有 4 列的成员消息: message_id(主键,自增) sender_id( key ) receiver_id( key ) 消息内容 我做了很多 SELECT
我在 cuda_computation.cu 中有以下代码 #include #include #include #include void checkCUDAError(const char
我正在使用 BeautifulSoup 在 for 循环中解析数千个网站。这是我的代码片段: def parse_decision(link): t1 = time.time() de
我正在使用 OpenCV 2.4 (C++) 在灰度图像上进行寻线。这涉及一些基本的图像处理步骤,如模糊、阈值、Canny 边缘检测器、梯度滤波器或霍夫变换。我必须在数千张图像上应用寻线算法。 考虑到
当我试图连续生成四次相同的报告时,我刚刚分析了我的报告应用程序。第一个用了 1859 毫秒,而后面的只用了 400 到 600 毫秒。对此的解释是什么?我能以某种方式使用它来使我的应用程序更快吗?报告
当我打开 Storyboard文件时,由于其中包含的 VC 数量,打开它需要 1-2 分钟。加快速度的最佳做法是什么?我们应该将一些 VC 移动到不同的 Storyboard文件中吗?我们是否应该使用
我有一个包含多个页面的 UIPageViewController。每个页面都是相同的 View Controller ,但会跟踪页码并显示 PDF 的正确页面。问题是每个 PDF 页面都需要在 cur
这实际上是两个问题,但它们非常相似,为了简单起见,我想将它们放在一起: 首先:给定一个已建立的 Java 项目,除了简单的代码内优化之外,还有哪些不错的方法可以加快它的速度? 其次:在用Java从头写
我有一个包含 1000 个条目的文档,其格式类似于:
我是一名优秀的程序员,十分优秀!