python中的文件处理

2 python

提前致谢.我编写了一个适用于小文件的程序.但这不适用于1 GB的文件.请告诉我有没有办法处理大文件.这是代码.

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 
Run Code Online (Sandbox Code Playgroud)

小智 17

readlines方法读入整个文件.对于与物理内存大小相关的文件,您不希望这样做.

修复是以小块读取文件,并单独处理它们.例如,您可以执行以下操作:

for line in f.xreadlines():
    ... do something with the line
Run Code Online (Sandbox Code Playgroud)

xreadlines不返回行的列表,而是一个迭代器,它会返回在一次一行,在for循环中调用它.更简单的方法是:

for line in f:
    ... do something with the line
Run Code Online (Sandbox Code Playgroud)

根据您的操作,逐行处理文件可能很容易或很难.我没有真正得到你的示例代码试图做的事情,但看起来它应该是可行的.


ffo*_*orw 7

该脚本无法正常工作,因为它预先读取了文件的所有行,因此无需将整个文件保存在内存中.迭代文件中所有行的最简单方法是

for line in open("test.txt", "r"):
    # do something with the "line"
Run Code Online (Sandbox Code Playgroud)


Mic*_*las 5

使用readlines()可以立即读取整个文件,因此您可以使用1 GB的内存.试试这个尝试:

f = open(...)
while 1:
   line = f.readline()
   if not line:
     break
   line = line.rstrip()
   ... do something with line
   ... 
f.close()
Run Code Online (Sandbox Code Playgroud)

如果您只需要删除\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)  
Run Code Online (Sandbox Code Playgroud)