首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python 大文本文件 解析、入库并转换后写入新文件,该如何解决

2012-02-16 
python 大文本文件 解析、入库并转换后写入新文件Python code#!/usr/bin/python2.7# encoding: utf-8 处

python 大文本文件 解析、入库并转换后写入新文件

Python code
#!/usr/bin/python2.7# encoding: utf-8''' 处理某大文本文件,结果同时写入数据库及文本文件 '''import refrom mylib.dbi import DataBaseInterfacefrom app_common import configclass Klass(object):    FMT = '%(id)d, %(name)s'    def __init__(self, **kwg):        self.id = dict(kwg).get('id')        self.name = dict(kwg).get('name')    def __str__(self):        ''' 按指定格式将对象属性格式化为字符串 '''        return self.FMT % self.__dict__    def sqltuple(self):        ''' 按指定的顺序输出对象属性元组 '''        return tuple([self.id, self.name])patt = re.compile(r'^(?P<id>\d+)\t(?P<name>.*)[\s\r\n]+?$', re.I|re.X|re.U)def process(line):    ''' 按预定的格式解析行,生成对象实例 '''    m = patt.match(line)    return None if not m else Klass(**m.groupdict())dbi = DataBaseInterface(**config)dbi.open()# dbi.batch是DataBaseInterface的方法:# 用dbi.conn.executemany执行批量数据操作# 支持 with 自动初始化-关闭,支持缓冲空间自动控制buff = dbi.batch(insertsql) src = open(srcfilename,'r')wrt = open(wrtfilename, 'w')with src, wrt, buff:    for ln in handle:        instance = process(ln)        if instance:            wrt.write('%s\n'%instance)            buff.append(instance.sqltuple())dbi.close()


以上代码从目前可以正常工作的程序中简化而来。
在其运行完后,由其它方式将新写的文件移入压缩包。
现在想进一步优化一下:新文件直接写入压缩包内(zip/gz/..均可);
我知道的一种方式是先将要写入的文本保存与内存,然后一次性写入压缩包中;
... 问题在于文件很大,不宜如此操作。

有什么方式可以这样:
wrt = SomePackageMethord.open(wrtfilename, 'w', compressmode)
或:
package = SomePackageMethord(packagefile, 'w', compressmode)
wrt = package.write(arc_filename)
?


特请支援。

[解决办法]
探讨
以上代码从目前可以正常工作的程序中简化而来。
在其运行完后,由其它方式将新写的文件移入压缩包。
现在想进一步优化一下:新文件直接写入压缩包内(zip/gz/..均可);
我知道的一种方式是先将要写入的文本保存与内存,然后一次性写入压缩包中;
... 问题在于文件很大,不宜如此操作。

有什么方式可以这样:
wrt = SomePackageMethord.open(wrtfilename, 'w', compressmode)
或:
package = SomePackageMethord(packagefile, 'w', compressmode)
wrt = package.write(arc_filename)

[解决办法]
zipfile不支持。看下:
http://stackoverflow.com/questions/297345/create-a-zip-file-from-a-generator-in-python

热点排行