Python论坛  - 讨论区

标题:[python-chinese] 大文件如何处理?需要有点想象力的问题

2006年09月11日 星期一 22:56

LianQiao lianqiao在gmail.com
星期一 九月 11 22:56:23 HKT 2006

†ÛiÿùÞÁǧ¶êòr‰©º×«²w­þšèç-³úÛ¶·ž†Ù¥~º&D;ëy覦ŠíDârئ¦Ší­©Ý¢ih‚«–ˆ z¹hÊ'²‰^­´A'-†ÊÊڝÚ&­©Ý¢g诧­©à{]4ÓG诧‘쬭¼

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月12日 星期二 07:34

3751 lwm3751在gmail.com
星期二 九月 12 07:34:10 HKT 2006

在 06-9-11,LianQiao<lianqiao at gmail.com> 写道:
> BTW: vc7自带stl的hash实现是很蠢,不过python得好像还可以。
你研究过vc7的STL源码吗?你凭什么说它的实现蠢?你以为你比P.J牛多少倍啊?有本事你写个STL该叫微软使用。不过我倒承认,STL里面的string的确有点……难怪有那么多的开源软件比如clucene都不使用它。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月12日 星期二 14:22

gashero harry.python在gmail.com
星期二 九月 12 14:22:20 HKT 2006

试着从大文件每次读入一个记录,比如一行就是一个记录吧?...。然后对每一个记录做一次哈西取值。就是用hash()函数,这样返回一个整数值。小文件同样用这种方法,得到所有记录内容的哈希值。然后再对所得的哈希值排序。这样再使用二分查找,速度就很快了。整个查找过程只需要各遍历大文件和小文件一次。另外,也许存储哈希值的表格也不小,内存上注意一点,或者干脆把获得的哈希值存储到另外一个随机文件/数据库中。
注意,这里的哈希值并不是哈西函数,两者有很大的区别。哈希值可以理解为报文摘要,通过一个很小的数字就可以区别出各个报文之间的区别。

当然,两个不同的记录拥有相同的哈希值还是有可能的,所以你只要用这个哈希值作为哈希表的键名,再用记录的文件指针位置作为哈希表的值,存储一下,这样一旦发现两个相同的键名出现,就可以直接查找文件中的对应记录,看看是否相同了。

哈西函数可以对原报文的一点点改变都做出很大的不同,如下的两个例子:
C:\Documents and Settings\harry>python
ActivePython 2.4.3 Build 12 (ActiveState Software Inc.) based on
Python 2.4.3 (#69, Apr 11 2006, 15:32:42) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a='ajeigjaew'
>>> hash(a)
-218920356
>>> a='aaabbb'
>>> b='aaabbb'
>>> c='aaaabb'
>>> hash(a)
-1590267375
>>> hash(b)
-1590267375
>>> hash(c)
509872510
>>>

-- 
从前有一只很冷的毛毛虫,他想获得一点温暖。而获得温暖的机会只有从树上掉下来,落进别人的领口。
片刻的温暖,之后便失去生命。而很多同类却连这片刻的温暖都没有得到就..
我会得到温暖么?小心翼翼的尝试,却还是会受到伤害。
我愿为那一刻的温暖去拼,可是谁愿意接受?

欢迎访问偶的博客:
http://blog.csdn.net/gashero

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号