Python中的文件处理

3 投票
6 回答
8065 浏览
提问于 2025-04-15 11:25

谢谢大家的帮助。我写了一个程序,可以处理小文件。但是当文件达到1GB的时候,就不行了。请问有没有什么方法可以处理大文件呢?下面是我的代码。

fh=open('reg.fa','r')
c=fh.readlines()
fh.close() 
s=''  
for i in range(0,(len(c))):  
    s=s+c[i]  
    lines=s.split('\n')
    for line in s:
            s=s.replace('\n','')
s=s.replace('\n','')          
print s 

6 个回答

5

使用readlines()方法时,你会一次性把整个文件读进内存,这样会占用1GB的内存。为了避免这种情况,你可以试试:

f = open(...)
while 1:
   line = f.readline()
   if not line:
     break
   line = line.rstrip()
   ... do something with line
   ... 
f.close()

如果你只是想去掉换行符(\n),那么就不要一行一行地处理,而是可以用一块一块的文本来处理:

import sys

f = open('query.txt','r')
while 1:
    part = f.read(1024)
    if not part:
        break
    part = part.replace('\n', '')
    sys.stdout.write(part)  
7

这个脚本不工作是因为它提前读取了文件的所有行,这样就需要把整个文件都放在内存里。要逐行读取文件,最简单的方法是

for line in open("test.txt", "r"):
    # do something with the "line"
17

readlines这个方法会把整个文件的内容都读进来。如果你的文件很大,而你的电脑内存又不够,那就不太合适这样做。

解决这个问题的方法是把文件分成小块来读取,然后逐个处理。比如,你可以这样做:

for line in f.xreadlines():
    ... do something with the line

xreadlines不会返回一个包含所有行的列表,而是返回一个迭代器,每次调用时只返回一行。这种做法更简单的方法是:

for line in f:
    ... do something with the line

根据你要做的事情,逐行处理文件可能简单也可能复杂。我不太明白你示例代码的具体意图,但看起来逐行处理是可以实现的。

撰写回答