第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

讀取csv文件時如何跳過第一行?

讀取csv文件時如何跳過第一行?

Go
守著一只汪 2023-06-26 17:52:49
我有一個尷尬的 csv 文件,我需要跳過第一行來閱讀它。我用 python/pandas 很容易做到這一點df = pd.read_csv(filename, skiprows=1)但我不知道如何在 Go 中做到這一點。package mainimport (    "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 fieldsPM_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_MAX3174659,H1095,H1095-11-ISM6-1(to ZJBSC-V1),2019-06-29 20:00:00,15,22.08,4.59,,,30.13,6.983174659,H1095,H1095-14-ISM6-1(to T6147-V),2019-06-29 20:00:00,15,2.11,10.92,,,4.43,22.45
查看完整描述

4 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

讀取 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]]

$


查看完整回答
反對 回復 2023-06-26
?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

只需調用即可Reader.Read()讀取一行,然后使用 繼續(xù)讀取其余部分Reader.ReadAll()。

看這個例子:

src := "one,two,three\n1,2,3\n4,5,6"


r := csv.NewReader(strings.NewReader(src))

if _, err := r.Read(); err != nil {

? ? panic(err)

}


records, err := r.ReadAll()

if err != nil {

? ? panic(err)

}

fmt.Println(records)

輸出(在Go Playground上嘗試):


[[1 2 3] [4 5 6]]


查看完整回答
反對 回復 2023-06-26
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

我們可以使用bufio.ReadBytes('\n')bufio 作為 Reader 并將其傳遞給 csv.NewReader


func readSample(reader io.Reader) ([][]string, error) {

    // if reader is bufio, we don't need to NewReader againg

    buf, ok := (reader).(*bufio.Reader)

    if !ok {

        buf = bufio.NewReader(reader)

    }

    _, err := buf.ReadBytes('\n')

    if err != nil {

        return nil, err

    }


    rows, err := csv.NewReader(buf).ReadAll()

    if err != nil {

        return nil, err

    }

    return rows, nil

}



查看完整回答
反對 回復 2023-06-26
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

雖然了解 io.ReadSeeker 的信息很豐富,但我認為跳過 csv 的第一行/行(通常是標題)的更簡單方法是使用切片功能,如下所示:


func readCsv(filename string) [][]string {

    f, err := os.Open(filename)

    if err != nil {

        log.Fatal(err)

    }

    defer f.Close()

    records := [][]string{}

    r := csv.NewReader(f)

    for {

        record, err := r.Read()

        if err == io.EOF {

            break

        }

        if err != nil {

            log.Fatal(err)

        }

        records = append(records, record)

    }

    return records[1:] // skip the header

}


查看完整回答
反對 回復 2023-06-26
  • 4 回答
  • 0 關注
  • 282 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號