python的Windows磁盘使用问题

时间:2015-09-29 22:40:02

标签: python windows disk

我正在执行后面的python代码。

我在一个文件夹(" articles")上运行它,它有几百个子文件夹和240,226个文件。

我正在计时执行。起初时间非常稳定,但在100,000个文件后变为非线性。现在时间(我以10,000个文件间隔计时)可以在30,000左右(或不是)之后变为非线性。

我打开了任务管理器,并通过python.exe将减速与99%的磁盘使用率相关联。我做过gc-collect()。 dels等,关闭了Windows索引。我已重新启动Windows,清空垃圾箱(我有几百GB免费)。没有任何帮助,如果有的话,磁盘使用似乎变得更加不稳定。

很抱歉很长的帖子 - 谢谢你的帮助

def get_filenames():
    for (dirpath, dirnames, filenames) in os.walk("articles/"):
        dirs.extend(dirnames)

    for dir in dirs:
        path = "articles" + "\\" + dir        
        nxml_files.extend(glob.glob(path + "/*.nxml"))

    return nxml_files

def extract_text_from_files(nxml_files):  
    for nxml_file in nxml_files:       
        fast_parse(nxml_file)

def fast_parse(infile):
    file = open(infile,"r")
    filetext = file.read()
    tag_breaks = filetext.split('><')
    paragraphs = [tag_break.strip('p>').strip('</') for tag_break in tag_breaks if tag_break.startswith('p>')]

def run_files(): 
    nxml_files = get_filenames()
    extract_text_from_files(nxml_files)

if __name__ == "__main__":    
    run_files()

1 个答案:

答案 0 :(得分:0)

有些事情可以优化。

首先,您打开文件,关闭它们。 with open(...) as name:块可以轻松完成。 Python 2中的BTW file对于变量名称来说是一个糟糕的选择,它是内置函数的名称。

您可以通过执行字符串比较而不是glob来删除一个光盘读取。

最后但并非最不重要:os.walk巧妙地吐出结果,所以不要将它们缓冲到列表中,处理一个循环内的所有内容。这将节省大量内存。

这是我可以从代码中提出的建议。有关导致I / O的更多详细信息,您应该使用分析。有关详细信息,请参阅https://docs.python.org/2/library/profile.html