3 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個贊
這是一個老問題,但如果有人正在尋找解決方案,我編寫了一個包來處理文件中的任何行。鏈接在這里。它可以打開一個文件并搜索到任何行位置,而無需將整個文件讀入內(nèi)存并進(jìn)行拆分。
import "github.com/stoicperlman/fls"
// This is just a wrapper around os.OpenFile. Alternatively
// you could open from os.File and use fls.LineFile(file) to get f
f, err := fls.OpenFile("test.log", os.O_CREATE|os.O_WRONLY, 0600)
defer f.Close()
// return begining line 1/begining of file
// equivalent to f.Seek(0, io.SeekStart)
pos, err := f.SeekLine(0, io.SeekStart)
// return begining line 2
pos, err := f.SeekLine(1, io.SeekStart)
// return begining of last line
pos, err := f.SeekLine(0, io.SeekEnd)
// return begining of second to last line
pos, err := f.SeekLine(-1, io.SeekEnd)
不幸的是,我不確定您將如何刪除,這只是讓您到達(dá)文件中的正確位置。對于您的情況,您可以使用它轉(zhuǎn)到要刪除的行并保存位置。然后尋找下一行并保存。您現(xiàn)在有要刪除的行的書擋。
// might want lineToDelete - 1
// this acts like 0 based array
pos1, err := f.SeekLine(lineToDelete, io.SeekStart)
// skip ahead 1 line
pos2, err := f.SeekLine(1, io.SeekCurrent)
// pos2 will be the position of the first character in next line
// might want pos2 - 1 depending on how the function works
DeleteBytesFromFileFunction(f, pos1, pos2)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個贊
根據(jù)我對 linecache 模塊的讀取,它需要一個文件并將其分解為基于 '\n' 行結(jié)尾的數(shù)組。您可以使用strings或bytes復(fù)制 Go 中的相同行為。您還可以使用bufio庫逐行讀取文件,并僅存儲或保存所需的行。
package main
import (
"bytes"
"fmt"
)
import "io/ioutil"
func main() {
b, e := ioutil.ReadFile("filename.txt")
if e != nil {
panic(e)
}
array := bytes.Split(b, []byte("\n"))
fmt.Printf("%v", array)
}

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個贊
我編寫了一個小函數(shù),允許您從文件中刪除特定行。
package main
import (
"io/ioutil"
"os"
"strings"
)
func main() {
path := "path/to/file.txt"
removeLine(path, 2)
}
func removeLine(path string, lineNumber int) {
file, err := ioutil.ReadFile(path)
if err != nil {
panic(err)
}
info, _ := os.Stat(path)
mode := info.Mode()
array := strings.Split(string(file), "\n")
array = append(array[:lineNumber], array[lineNumber+1:]...)
ioutil.WriteFile(path, []byte(strings.Join(array, "\n")), mode)
}
- 3 回答
- 0 關(guān)注
- 343 瀏覽
添加回答
舉報(bào)