请教:我的Python处理文件只能处理前14500行?

Fitz999 发布于 2015/04/08 16:43
阅读 286
收藏 0
我用Python 2.6版和Python 3.2版处理数据。数据比较大,是写在一个.txt文件里。

我用Python处理这个.txt文件,我发现一个问题,我的Python只能处理前14500行!

比如我用shutil.copyfile把这个.txt文件拷贝到另外一个地方,我发现新文件只复制了原文件的前14568行。

比如我用f_in.read().splitlines()读取这个.txt文件,我发现只能读到原文件的前14492行。

是Python不能处理特别大的文件么?

谢谢!


加载中
2
focusfree
focusfree

你这样读会一次性把所有内容加载到内存里面。

读大文件的时候可以这样读,而且快:

for i in open('test.txt'):
    do(i)  #处理文件每行内容



0
等风起
等风起

理论上,不应该存在这样的问题。

文件的读写得考虑内存消耗,尤其对于大文件读写。思路一个,分块读写。不要一次读进内存。python3.0以后,会发现很多的东西都返回迭代器,在使用上,面对大数据的时候,能有有效的降低内存消耗。python里大文件的读写,不要直接调用read()。这样会一次读到内存。效率很低的。即使用read,也要分字节读。下面给个例子:

# 大文件读
# for line in f:文件对象f视为一个迭代器
with open(FILE) as f:
    for line in f:
        do_something(line)

# 当然可以wrap一个read,返回一个迭代器对象
def wrap_read(file_path, chunk_size=1024):
    with open(file_path) as f:
        while True:
            data = f.read(chunk_size)
            if not data:
                break
            yield data
# 在外面我们就可以这样调用了:
for data in wrap_read(FILE):
    do_something(data)

返回顶部
顶部