要实现在单机上处理大小为10G的文件,需要结合4G以上的内存和高效的处理算法。首先,确保计算机具备4G以上的内存,以便在内存中进行数据处理,减少磁盘读写次数。其次,利用内存映射等技术,将文件映射到内存中进行读取和处理,减少磁盘IO开销。另外,选择适合大文件处理的算法和数据结构,如分块读取、多线程并行处理等,以提高处理效率。最后,合理利用缓存和临时文件,避免数据频繁读写磁盘。通过这些方法,可以在单机上高效地处理10G大小的文件。
下面的讨论基于的假定:可以单独处理一行数据,行间数据相关性为零。
方法一:
仅使用 Python 内置模板,逐行读取到内存。
使用 yield,好处是解耦读取操作和处理操作:
def python_read(filename): with open(filename,"r",encoding="utf-8") as f: while True: line = f.readline() if not line:return yield line
以上每次读取一行,逐行迭代,逐行处理数据
if __name__ == "__main__": g = python_read("./data/movies.dat") for c in g: print(c) # process c
方法二:
方法一有缺点,逐行读入,频繁的 IO 操作拖累处理效率。是否有一次 IO ,读取多行的方法?
pandas
包read_csv
函数,参数有 38 个之多,功能非常强大。
关于单机处理大文件,read_csv
的chunksize
参数能做到,它被设置为5
, 意味着一次读取 5 行。
def pandas_read(filename,sep=",",chunksize=5): reader = pd.read_csv(filename,sep,chunksize=chunksize) while True: try: yield reader.get_chunk() except StopIteration: print("---Done---") break
使用如同方法一:
if __name__ == "__main__": g = pandas_read("./data/movies.dat",sep="::") for c in g: print(c) # process c
以上就是单机处理大文件的两个方法,推荐使用方法二,更加灵活。除了工作中会用到,面试中也有时被问到。
近期文章
Python核心技术与实战
Python全栈-60天精通之路
Python网络爬虫与文本数据分析
Python数据分析相关学习资源汇总帖
漂亮~pandas可以无缝衔接Bokeh
综述:文本分析在市场营销研究中的应用
Lazy Prices公司年报内容变动碰上股价偷懒
用python帮你生产指定内容的word文档
B站跨年晚会弹幕内容分析
YelpDaset: 酒店管理类数据集10+G
NRC词语情绪词典和词语色彩词典
Loughran&McDonald金融文本情感分析库