我有一个笨拙的csv文件,我需要跳过第一行来阅读它。
我正在使用python / pandas轻松做到这一点
df = pd.read_csv(filename, skiprows=1)
但是我不知道如何在Go中做到这一点。
package main import ( "encoding/csv" "fmt" "log" "os" ) type mwericsson struct { id string name string region string } func main() { rows := readSample() fmt.Println(rows) //appendSum(rows) //writeChanges(rows) } func readSample() [][]string { f, err := os.Open("D:/in/20190629/PM_IG30014_15_201906290015_01.csv") if err != nil { log.Fatal(err) } rows, err := csv.NewReader(f).ReadAll() f.Close() if err != nil { log.Fatal(err) } return rows }
错误:
2019/07/01 12:38:40 record on line 2: wrong number of fields
PM_IG30014_15_201906290015_01.csv:
PM_IG30014_15_201906290015_01.csv
PTN Ethernet-Port RMON Performance,PORT_BW_UTILIZATION,2019-06-29 20:00:00,33366 DeviceID,DeviceName,ResourceName,CollectionTime,GranularityPeriod,PORT_RX_BW_UTILIZATION,PORT_TX_BW_UTILIZATION,RXGOODFULLFRAMESPEED,TXGOODFULLFRAMESPEED,PORT_RX_BW_UTILIZATION_MAX,PORT_TX_BW_UTILIZATION_MAX 3174659,H1095,H1095-11-ISM6-1(to ZJBSC-V1),2019-06-29 20:00:00,15,22.08,4.59,,,30.13,6.98 3174659,H1095,H1095-14-ISM6-1(to T6147-V),2019-06-29 20:00:00,15,2.11,10.92,,,4.43,22.45
读取csv文件时跳过第一行
例如,
package main import ( "bufio" "encoding/csv" "fmt" "io" "os" ) func readSample(rs io.ReadSeeker) ([][]string, error) { // Skip first row (line) row1, err := bufio.NewReader(rs).ReadSlice('\n') if err != nil { return nil, err } _, err = rs.Seek(int64(len(row1)), io.SeekStart) if err != nil { return nil, err } // Read remaining rows r := csv.NewReader(rs) rows, err := r.ReadAll() if err != nil { return nil, err } return rows, nil } func main() { f, err := os.Open("sample.csv") if err != nil { panic(err) } defer f.Close() rows, err := readSample(f) if err != nil { panic(err) } fmt.Println(rows) }
输出:
$ cat sample.csv one,two,three,four 1,2,3 4,5,6 $ go run sample.go [[1 2 3] [4 5 6]] $ $ cat sample.csv PTN Ethernet-Port RMON Performance,PORT_BW_UTILIZATION,2019-06-29 20:00:00,33366 DeviceID,DeviceName,ResourceName,CollectionTime,GranularityPeriod,PORT_RX_BW_UTILIZATION,PORT_TX_BW_UTILIZATION,RXGOODFULLFRAMESPEED,TXGOODFULLFRAMESPEED,PORT_RX_BW_UTILIZATION_MAX,PORT_TX_BW_UTILIZATION_MAX 3174659,H1095,H1095-11-ISM6-1(to ZJBSC-V1),2019-06-29 20:00:00,15,22.08,4.59,,,30.13,6.98 3174659,H1095,H1095-14-ISM6-1(to T6147-V),2019-06-29 20:00:00,15,2.11,10.92,,,4.43,22.45 $ go run sample.go [[DeviceID DeviceName ResourceName CollectionTime GranularityPeriod PORT_RX_BW_UTILIZATION PORT_TX_BW_UTILIZATION RXGOODFULLFRAMESPEED TXGOODFULLFRAMESPEED PORT_RX_BW_UTILIZATION_MAX PORT_TX_BW_UTILIZATION_MAX] [3174659 H1095 H1095-11-ISM6-1(to ZJBSC-V1) 2019-06-29 20:00:00 15 22.08 4.59 30.13 6.98] [3174659 H1095 H1095-14-ISM6-1(to T6147-V) 2019-06-29 20:00:00 15 2.11 10.92 4.43 22.45]] $