douquanqiao6788
2019-07-01 08:14
采纳率: 100%
浏览 5.5k
已采纳

读取CSV文件时如何跳过第一行?

我有一个稍复杂的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
}

Error:

2019/07/01 12:38:40 record on line 2: wrong number of fields

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

图片转代码服务由CSDN问答提供 功能建议

我有一个笨拙的csv文件,我需要跳过第一行来阅读它。

我正在使用python / pandas轻松完成此操作

  df = pd.read_csv(文件名,skiprows = 1)
   
 
 

,但我不知道如何在Go中进行操作。

 包main 
 
import(
“ encoding / csv” \  n“ fmt” 
“ log” 
“ os” 
)
 
键入mwericsson结构{
 id字符串
名称字符串
区域字符串
} 
 
func main(){
 \  n行:= readSample()
 
 fmt.Println(rows)
 // appendSum(rows)
 // writeChanges(rows)
} 
 
func readSample()[] [] string {\  nf,err:= os.Open(“ D:/in/20190629/PM_IG30014_15_201906290015_01.csv”)
如果err!= nil {
 log.Fatal(err)
} 
行,err:= csv。  NewReader(f).ReadAll()
 f.Close()
 if err!= nil {
 log.Fatal(err)
} 
返回行
} 
   
 
 

错误:

  2019/07/01 12:38:40第2行记录:错误的字段数
   
 
 

PM_IG30014_15_201906290015_01.csv

  PTN以太网端口RMON性能,PORT_BW_UTILIZATION,2019-06  -29 20:00:00,33366 
DeviceID,DeviceName,DeviceName,ResourceName,CollectionTime,GranularityPeriod,PORT_RX_BW_UTILIZATION,PORT_TX_BW_UTILIZATION,RXGOODFULLFRAMESPEED,TXGOODFULLFRAMESPEED,PORT_RX_BW_UTILIZZ_HBS_H_I_10_C,(1)_CBS_HIC_10,1_CBS_HIC_10,1_CBS_HIC_10,1_I_ZI_Z_H_(1,1)  2019-06-29 20:00:00,15,22.08,4.59 ,,, 30.13,6.98 
3174659,H1095,H1095-14-ISM6-1(至T6147-V),2019-06-29 20:00:  00,15,2.11,10.92 ,,, 4.43,22.45 
   
 
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • duanhe6718 2019-07-01 12:05
    已采纳

    skip the first row when reading a csv file


    For example,

    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('
    ')
        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)
    }
    

    Output:

    $ 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]]
    $
    
    已采纳该答案
    打赏 评论
  • dongyang4615 2019-07-01 08:18

    Simply call Reader.Read() to read a line, then proceed to read the rest with Reader.ReadAll().

    See this example:

    src := "one,two,three
    1,2,3
    4,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)
    

    Output (try it on the Go Playground):

    [[1 2 3] [4 5 6]]
    
    打赏 评论

相关推荐 更多相似问题