簡體   English   中英

python中的文件處理

[英]file handling in 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 

readlines方法讀入整個文件。 對於與物理內存大小相關的文件,您不希望這樣做。

修復是以小塊讀取文件,並單獨處理它們。 例如,您可以執行以下操作:

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

xreadlines不返回行列表,而是返回迭代器,當for循環調用它時,它會一次返回一行。 更簡單的方法是:

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

根據您的操作,逐行處理文件可能很容易或很難。 我沒有真正得到你的示例代碼試圖做的事情,但看起來它應該是可行的。

該腳本無法正常工作,因為它預先讀取了文件的所有行,因此無需將整個文件保存在內存中。 迭代文件中所有行的最簡單方法是

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

使用readlines()可以立即讀取整個文件,因此您可以使用1 GB的內存。 試試這個嘗試:

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)  

你的程序非常冗余。 看起來您可以使用以下行完成所有操作:

import sys
for line in open('reg.fa'):
    sys.stdout.write(line.rstrip())

足夠了。 該程序在問題中提供了與原始代碼相同的結果,但更簡單,更清晰。 它還可以處理任何大小的文件。

import sys
import os

如果沒有創建文件,請使用wb + mode,這將創建文件並寫入數據!

f = open('f_name.txt','wb+')
while 1:
    part = f.read(1024)
    if not part:
        break
    part = part.replace('\n', '')
    sys.stdout.write(part) 
 f.close()

從您的編碼中可以清楚地看到您需要單行的字符串緩沖區。 作為編碼的觀點,將整個文件內容存儲在一個字符串緩沖區中是很糟糕的。 然后你處理了你的要求。 代碼包含太多局部變量。

您可以使用以下代碼塊。

f = open(file_name,mode)

對於f中的行:

"""

Do the processing 

"""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM