当前位置: 首页 > 面试题库 >

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

拓拔阎宝
2023-03-14
问题内容

我有一个笨拙的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

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]]
$


 类似资料:
  • 在 Mule 4 中,我正在读取一个大型 csv 文件进行转换,需要将内容写入数据库表。csv 文件没有标头。当我默认运行集成时,第一行被跳过,就好像默认值被预先确定为标题一样。 我看了一下应用程序类型。xml,看起来头被设置为false,如下所示 任何建议都将不胜感激。谢谢

  • 当使用扫描仪对象从文本文件中读取时,我希望它跳过文件中的第一行。我该怎么做?

  • 问题内容: 这是我的代码,我能够打印每行,但是当出现空白行时,它会打印;由于CSV文件格式,因此当空白行出现时我想跳过 问题答案: 如果要跳过所有空格行,则应使用以下测试:。 由于您可能需要做的事情不只是将非空白行打印到控制台上(不需要使用CSV模块),因此这里是一个涉及DictReader的示例:

  • 问题内容: 使用扫描程序对象从文本文件读取时,我希望它跳过文件的第一行。我将如何做到这一点? 问题答案: 只需在while循环之前使用即可。如JavaDoc中所述,这将跳过第一行。 还有关于您的命名的注释。Java语言具有广泛接受的约定。类名总是以大写字母开头,变量名总是以小写字母开头(常量除外,但现在不必担心)。在这里阅读更多。

  • 问题内容: 这是我目前正在使用的行 要跳过包含标题的csv的第一行。我不想使用任何分隔符,除了默认的一个逗号(,)已在默认构造函数中提供。在参数化构造函数中,可以选择跳过否。行,但如何处理构造函数的第二和第三参数。 - 谢谢 问题答案: CSVReader类的此构造方法在读取文件时将跳过csv的第一行。

  • 问题内容: 我正在尝试读取日志文件,并将某些值与预设阈值进行比较。我的代码设法通过函数中的第一个循环记录原始数据。 我添加了打印语句以尝试弄清楚发生了什么,并且我已经推断出我的第二个for循环永远不会“发生”。 这是我的代码: 这就是我调用此函数的方式: 看起来像这样: 我尝试谷歌搜索类似的问题,但没有发现。我尝试将我的第一个for循环移入,但是发生相同的问题。目前没有语法错误,我现在无法看到该问