讀取和修改大檔案的某行內容

2022-03-15 20:17:28 字數 866 閱讀 7038

最近碰到乙個比較有趣的問題,就是修改某個檔案的某一行字元,不過檔案太大,file()直接讀取是不可能的,我使用fgets來跳轉到指定行,並用fwrite修改某個字串:

$fp = fopen('d:/file.txt', 'r+');

if ($fp)

fgets($fp);

$i++;

}fclose($fp);

}這裡需要注意的是fgets獲取到一行後,檔案指標指向行尾(也就是下一行開頭),所以fwrite操作的是fgets後的下一行開頭,至於從該行的第幾個字元開始寫,可以使用fseek函式來移動檔案指標。另外乙個需要注意的是,這裡fwrite寫入是執行替換操作,而不是插入操作,所以指標後面的字元會乙個個被替換掉。至於怎麼插入我就沒研究了。估計很困難。為了效率可能只能寫入另外乙個臨時檔案了,不知道有沒有其他更好的方法。

另外今天還看到了使用spl進行操作的方法:

$fp = new splfileobject('d:/file.txt', 'r+');

//轉到第二行, seek方法引數從0開始計數, 經我測試指標指向行尾了, 所以修改的是第三行

$fp->seek(1);

//獲取當前行內容(第二行)

$line = $fp->current();

//下面是對第三行的操作

$fp->fseek(2, seek_cur);

$fp->fwrite('#');

splfileobject提供的方法比基本的檔案操作函式更豐富一些,包括採用key/value方法遍歷檔案行等。spl應該是php5增加進去的吧,還有其他很多很有用的物件。包括陣列、檔案目錄操作、異常處理、一些基本型別操作等,這些功能還在陸續增加,可以通過繼承spl擴充套件這些方法讓我們處理底層的操作更方便。

shell 實現讀取檔案某行的內容

root node2 sxf cat etc hosts 檢視檔案內容 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 1 localhost localhost.localdomain loc...

原創 python修改檔案某行的內容

1 coding utf 8 2 34 version 1.0 5 author zhipeng zhang 6 date 2015 5 28 7 import os 8 9 import fileinput 1011 12 def rewrite line filename,lineno,text...

簡單的讀取檔案的每行內容

最近在做音訊處理的東西,分類svm後得到如下的檔案 1.11 的這樣乙個檔案,每行只有 1或1,現為統計分類器的準確性,需要統計出1和 1的個數 程式開始如下 include include include int main else while fgets buf,10,fp null print...