如何快速读取25000个小文本文件的内容?

1 投票
3 回答
928 浏览
提问于 2025-04-16 05:07

我下载了很多HTML文件,存储在操作系统中。现在我想获取这些文件的内容,并提取我需要的数据,然后把它们保存到MySQL数据库里。
我用传统的方法一个一个加载文件,这样效率太低了,差不多要花8分钟。

欢迎任何建议。

g_fields=[
 'name',
 'price',
 'productid',
 'site',
 'link',
 'smallImage',
 'bigImage',
 'description',
 'createdOn',
 'modifiedOn',
 'size',
 'weight',
 'wrap',
 'material',
 'packagingCount',
 'stock',
 'location',
 'popularity',
 'inStock',
 'categories',
]   @cost_time
def batch_xml2csv():
    "批量将xml导入到一个csv文件中"
    delete(g_xml2csv_file)
    f=open(g_xml2csv_file,"a")
    import os.path
    import mmap
    for file in glob.glob(g_filter):
    print "读入%s"%file
    ff=open(file,"r+")
    size=os.path.getsize(file)
    data=mmap.mmap(ff.fileno(),size)
    s=pq(data.read(size))
    data.close()
    ff.close()
    #s=pq(open(file,"r").read())
    line=[]
    for field in g_fields:
        r=s("field[@name='%s']"%field).text()
        if r is None:
            line.append("\N")
        else:
            line.append('"%s"'%r.replace('"','\"'))
    f.write(",".join(line)+"\n")
    f.close()
    print "done!"

我试过使用mmap,但似乎效果不好。

3 个回答

0

如果算法是正确的,使用psyco模块有时候可以大大提高性能。不过,它不支持Python 2.7或Python 3以上的版本。

0

如果你使用 scrapy,你可以在下载文件的同时,用多个线程来扫描这些文件。

0

如果你电脑里有25000个文本文件,那你可能做错了。根据你存储这些文件的方式,查找文件时可能会非常慢,甚至需要在硬盘上花时间去寻找这些文件。

如果你有25000个任何东西,把它们放到一个数据库里,并且使用智能索引会更快——即使你把索引字段设置为文件名,速度也会更快。

如果你有多个文件夹,层级深达N层,使用数据库仍然会更快。

撰写回答