Python中的文件处理
谢谢大家的帮助。我写了一个程序,可以处理小文件。但是当文件达到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
根据你要做的事情,逐行处理文件可能简单也可能复杂。我不太明白你示例代码的具体意图,但看起来逐行处理是可以实现的。