ZBLOG

goland 读取文件名为:C:\Users\You\Downloads\一致性核查清单详单导出 - 2023-05-17T103201.607.csv、一致性核查清单详单导出 - 2023-05-17T103149.925.csv 的 GBK编码格式的csv文件;第一行为表头,并且表头长度为18的直接另存为temp.csv,如果表头长度为17的则在第六列插入列名为“网络制式的”列然后追加到temp.csv

以下是读取文件名为C:\Users\You\Downloads\一致性核查清单详单导出 - 2023-05-17T103201.607.csv、一致性核查清单详单导出 - 2023-05-17T103149.925.csv的GBK编码格式的csv文件,并处理表头的代码:

package main

import (
    "encoding/csv"
    "fmt"
    "os"
)

func main() {
    // 打开文件
    f1, err := os.Open("C:\\Users\\You\\Downloads\\一致性核查清单详单导出 - 2023-05-17T103201.607.csv")
    if err != nil {
        panic(err)
    }
    defer f1.Close()

    f2, err := os.Open("C:\\Users\\You\\Downloads\\一致性核查清单详单导出 - 2023-05-17T103149.925.csv")
    if err != nil {
        panic(err)
    }
    defer f2.Close()

    // 解析CSV文件
    r1 := csv.NewReader(f1)
    r1.LazyQuotes = true
    r1.TrimLeadingSpace = true
    r1.FieldsPerRecord = -1

    r2 := csv.NewReader(f2)
    r2.LazyQuotes = true
    r2.TrimLeadingSpace = true
    r2.FieldsPerRecord = -1

    records1, err := r1.ReadAll()
    if err != nil {
        panic(err)
    }

    records2, err := r2.ReadAll()
    if err != nil {
        panic(err)
    }

    // 处理第一个文件
    if len(records1[0]) == 18 {
        // 直接另存为temp.csv
        f, err := os.Create("temp.csv")
        if err != nil {
            panic(err)
        }
        defer f.Close()

        w := csv.NewWriter(f)
        err = w.WriteAll(records1)
        if err != nil {
            panic(err)
        }

    } else if len(records1[0]) == 17 {
        // 在第6列插入“网络制式的”列,然后追加到temp.csv
        records1[0] = append(records1[0][:5], append([]string{"网络制式的"}, records1[0][5:]...)...)
        for i := range records1[1:] {
            records1[i+1] = append(records1[i+1][:5], append([]string{""}, records1[i+1][5:]...)...)
        }

        f, err := os.Create("temp.csv")
        if err != nil {
            panic(err)
        }
        defer f.Close()

        w := csv.NewWriter(f)
        err = w.WriteAll(records1)
        if err != nil {
            panic(err)
        }
    }

    // 处理第二个文件
    if len(records2[0]) == 18 {
        f, err := os.OpenFile("temp.csv", os.O_APPEND|os.O_WRONLY, os.ModeAppend)
        if err != nil {
            panic(err)
        }
        defer f.Close()

        w := csv.NewWriter(f)
        err = w.WriteAll(records2)
        if err != nil {
            panic(err)
        }

    } else if len(records2[0]) == 17 {
        records2[0] = append(records2[0][:5], append([]string{"网络制式的"}, records2[0][5:]...)...)
        for i := range records2[1:] {
            records2[i+1] = append(records2[i+1][:5], append([]string{""}, records2[i+1][5:]...)...)
        }

        f, err := os.OpenFile("temp.csv", os.O_APPEND|os.O_WRONLY, os.ModeAppend)
        if err != nil {
            panic(err)
        }
        defer f.Close()

        w := csv.NewWriter(f)
        err = w.WriteAll(records2)
        if err != nil {
            panic(err)
        }
    }

    fmt.Println("Done")
}

代码中使用了csv包来解析和处理CSV文件,首先打开并读取两个CSV文件,然后根据表头长度的不同进行不同的处理:

如果表头长度为18,则直接另存为temp.csv

如果表头长度为17,则在第6列插入“网络制式的”列,然后追加到temp.csv

最后输出“Done”表示处理完成。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=2439

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?