繁体   English   中英

python的Windows磁盘使用问题

[英]Windows disk usage issues with python

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

我正在一个文件夹(“文章”)上运行它,该文件夹共有数百个子文件夹,共有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()

有些事情可以优化。

首先,是打开文件,还是关闭文件。 with open(...) as name: A块可以轻松实现这一点。 Python 2 file中的BTW对于变量名是一个不好的选择,它是内置函数的名称。

您可以通过进行字符串比较而不是全局比较来删除读取的一张光盘。

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

我可以从代码中得到建议。 有关导致I / O的原因的更多详细信息,应使用性能分析。 有关详细信息,请参见https://docs.python.org/2/library/profile.html

暂无
暂无

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

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