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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將可變長(zhǎng)度數(shù)組從 csv 解析為結(jié)構(gòu)體

將可變長(zhǎng)度數(shù)組從 csv 解析為結(jié)構(gòu)體

Go
藍(lán)山帝景 2023-08-14 15:10:43
我有以下設(shè)置來(lái)解析 csv 文件:package mainimport (    "fmt"    "os"    "encoding/csv")type CsvLine struct {    Id string    Array1 [] string    Array2 [] string}func ReadCsv(filename string) ([][]string, error) {    f, err := os.Open(filename)    if err != nil {        return [][]string{}, err    }    defer f.Close()    lines, err := csv.NewReader(f).ReadAll()    if err != nil {        return [][]string{}, err    }    return lines, nil}func main() {    lines, err := ReadCsv("./data/sample-0.3.csv")    if err != nil {        panic(err)    }    for _, line := range lines {                fmt.Println(line)        data := CsvLine{            Id: line[0],            Array1: line[1],            Array2: line[2],        }        fmt.Println(data.Id)        fmt.Println(data.Array1)        fmt.Println(data.Array2)    }}我的 csv 文件中有以下設(shè)置:594385903dss,"['fhjdsk', 'dfjdskl', 'fkdsjgooiertio']","['jflkdsjfl', 'fkjdlsfjdslkfjldks']"87764385903dss,"['cxxc', 'wqeewr', 'opi', 'iy', 'qw']","['cvbvc', 'gf', 'mnb', 'ewr']"我的理解是,可變長(zhǎng)度列表應(yīng)該解析為切片,是否可以直接通過(guò) csv 閱讀器來(lái)執(zhí)行此操作?(csv 輸出是通過(guò) python 項(xiàng)目生成的。)感謝幫助/建議。
查看完整描述

1 回答

?
幕布斯7119047

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊

CSV沒(méi)有“可變長(zhǎng)度數(shù)組”的概念,它只是一個(gè)以逗號(hào)分隔的值列表。RFC 4180中描述了該格式,這正是該encoding/csv包所實(shí)現(xiàn)的。

您只能從 CSV 行中獲取字符串切片。如何解釋這些價(jià)值觀取決于您。如果您想進(jìn)一步拆分?jǐn)?shù)據(jù),則必須對(duì)數(shù)據(jù)進(jìn)行后處理。

您所擁有的內(nèi)容可以簡(jiǎn)單地與regexp包一起處理,例如

var r = regexp.MustCompile(`'[^']*'`)


func split(s string) []string {

? ? parts := r.FindAllString(s, -1)

? ? for i, part := range parts {

? ? ? ? parts[i] = part[1 : len(part)-1]

? ? }

? ? return parts

}

測(cè)試它:


s := `['one', 'two', 'three']`

fmt.Printf("%q\n", split(s))

s = `[]`

fmt.Printf("%q\n", split(s))

s = `['o,ne', 't,w,o', 't,,hree']`

fmt.Printf("%q\n", split(s))

輸出(在Go Playground上嘗試):


["one" "two" "three"]

[]

["o,ne" "t,w,o" "t,,hree"]

使用此split()函數(shù),處理可能如下所示:


for _, line := range lines {

? ? data := CsvLine{

? ? ? ? Id:? ? ?line[0],

? ? ? ? Array1: split(line[1]),

? ? ? ? Array2: split(line[2]),

? ? }

? ? fmt.Printf("%+v\n", data)

}

輸出(在Go Playground上嘗試):

{Id:594385903dss?Array1:[fhjdsk?dfjdskl?fkdsjgooiertio]?Array2:[jflkdsjfl?fkjdlsfjdslkfjldks]}
{Id:87764385903dss?Array1:[cxxc?wqeewr?opi?iy?qw]?Array2:[cvbvc?gf?mnb?ewr]}


查看完整回答
反對(duì) 回復(fù) 2023-08-14
  • 1 回答
  • 0 關(guān)注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)