首页 / PYTHON / 在Python中寻找文件的中间
在Python中寻找文件的中间
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Python中寻找文件的中间,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1473字,纯文字阅读大概需要3分钟。
内容图文
![在Python中寻找文件的中间](/upload/InfoBanner/zyjiaocheng/659/739fd1332e39473087a22d7cd10ae20c.jpg)
我正在编写一个程序来搜索非常大(无序)文件中的特定行(因此最好不要将整个文件加载到内存中).
我正在实现多线程以加快该过程.我正在尝试为特定线程提供文件的特定部分,即第一个线程将运行到文件的第一季度,第二个线程从第一个线程停止的端点扫描(同时),以此类推.
因此,要做到这一点,我需要找到文件不同部分的字节位置,以简化问题,可以说我只想找到文件的中间位置.但问题是每行的长度都不同,所以如果我这样做
fo.seek(0, 2)
end = fo.tell()
mid = end/2
fo.seek(mid, 0)
它可以使我处于中间位置.因此,我需要一种寻找下一个或上一个换行符的方法.另外,请注意,我不希望确切的中间位置位于中间(因为它的文件很大).
这是我能够编写的代码,我不确定这是否会将文件加载到内存中.而且我真的很想避免打开同一文件的2个实例(我在程序中这样做是因为我不想担心读取文件时偏移量的变化).
任何更快的修改(或新程序)将不胜感激.
fo = open(filename, "rw+")
f2 = open(filename, "rw+")
file_ = dict()
fo.seek(0, 2)
file_['end'] = fo.tell()
file_['mid'] = file_['end'] / 2
fo.seek(file_['mid'], 0)
f2.seek(file_['mid'], 0)
line = f2.readline()
fo.seek(f2.tell(), 0)
file_['mid'] = f2.tell()
fo.seek(file_['mid'], 0)
print fo.readline()
解决方法:
多大才大?即使是1-10GB的文件,grep也会相对快速地流泪.
如果文件是静态文件,并且您打算重复搜索它,则可以拆分它:
split -l <line_count> <file>
现在您有了多个文件,并且可以将每个文件传递到单独的线程/进程/任何文件.
文件已排序吗?因为现在您可以使用fo.seek()调用进行二进制搜索,所以这再次改变了事情.
多快才足够快?超过某个点,您将必须建立搜索索引.到那时,简单的工具(例如grep,split等)就产生了奇迹.
没有更多信息,就无法说出正确的权衡.
内容总结
以上是互联网集市为您收集整理的在Python中寻找文件的中间全部内容,希望文章能够帮你解决在Python中寻找文件的中间所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。