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)
根据您的操作,逐行处理文件可能很容易或很难.我没有真正得到你的示例代码试图做的事情,但看起来它应该是可行的.
该脚本无法正常工作,因为它预先读取了文件的所有行,因此无需将整个文件保存在内存中.迭代文件中所有行的最简单方法是
for line in open("test.txt", "r"):
# do something with the "line"
Run Code Online (Sandbox Code Playgroud)
使用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)
| 归档时间: |
|
| 查看次数: |
6953 次 |
| 最近记录: |