我有一个巨大的文本文件(~1GB),遗憾的是我使用的文本编辑器不会读取如此大的文件.但是,如果我可以将它分成两个或三个部分,我会没事的,所以,作为一个练习,我想在python中编写一个程序来完成它.
我认为我希望程序要做的是找到一个文件的大小,将该数字分成几部分,对于每个部分,以块的形式读取到该点,写入文件名 .nnn输出文件,然后读取 -到下一个换行符并写入,然后关闭输出文件等.显然,最后一个输出文件只是复制到输入文件的末尾.
你能帮我解决关键文件系统相关的部分:文件大小,读取和写入块以及读取换行符吗?
我将首先编写这个代码测试,所以没有必要给我一个完整的答案,除非它是一个单行;-)
linux有一个split命令
split -l 100000 file.txt
会分成等于100,000行大小的文件
检查os.stat()
文件大小和file.readlines([sizehint])
.这两个函数应该是阅读部分所需要的,希望你知道如何写作:)
作为替代方法,使用日志库:
>>> import logging.handlers >>> log = logging.getLogger() >>> fh = logging.handlers.RotatingFileHandler("D://filename.txt", maxBytes=2**20*100, backupCount=100) # 100 MB each, up to a maximum of 100 files >>> log.addHandler(fh) >>> log.setLevel(logging.INFO) >>> f = open("D://biglog.txt") >>> while True: ... log.info(f.readline().strip())
您的文件将显示如下:
filename.txt(文件结尾)
filename.txt.1
filename.txt.2
...
filename.txt.10(文件开头)
这是一种快速简便的方法,可以使大型日志文件与您的RotatingFileHandler
实现相匹配.
这种生成器方法是一种(慢)方式来获取一条线而不会炸毁你的记忆.
import itertools def slicefile(filename, start, end): lines = open(filename) return itertools.islice(lines, start, end) out = open("/blah.txt", "w") for line in slicefile("/python27/readme.txt", 10, 15): out.write(line)