정말 간단한 CSV 파일 구문 분석을 시도하고 있지만 어떤 이유로 인해 파일의 마지막 행만 읽습니다.CSV 파일 구문 분석 수행
나는 reader.ReadAll()
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
csvfile, err := os.Open("somecsvfile.csv")
if err != nil {
fmt.Println(err)
return
}
defer csvfile.Close()
reader := csv.NewReader(csvfile)
reader.FieldsPerRecord = -1 // see the Reader struct information below
rawCSVdata, err := reader.ReadAll()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// sanity check, display to standard output
for _, each := range rawCSVdata {
fmt.Printf("email : %s and timestamp : %s\n", each[0], each[1])
}
}
를 사용하여 시도했다 그리고 나는이 조각 정말 간단 보인다 온라인을 발견 이러한 조각의
for {
row, err := csvr.Read()
if err != nil {
if err == io.EOF {
err = nil
}
}
fmt.Println(row)
}
모두에서 단순한 reader.Read()
시도했습니다. CSV 패키지는 내가 원하는 것을 정확하게 표현하는 것 같습니다 (ReadAll()
은 전체 CSV를 문자열 슬라이스로 읽어야합니다).
CSV 파일도 완전히 잘 보입니다. 온라인 하나 다운로드 나는 아래있다 (각 행은 첫 번째 행을 제외한 별도의 항목입니다).
내가 뭘 잘못하고 있니?
street,city,zip,state,beds,baths,sq__ft,type,sale_date,price,latitude,longitude
3526 HIGH ST,SACRAMENTO,95838,CA,2,1,836,Residential,Wed May 21 00:00:00 EDT 2008,59222,38.631913,-121.434879
51 OMAHA CT,SACRAMENTO,95823,CA,3,1,1167,Residential,Wed May 21 00:00:00 EDT 2008,68212,38.478902,-121.431028
편집 :
나는 내가 잘못 무슨 일이 일어나고 있는지 발견 생각합니다. 아래 코드에서 fmt.Print(col)
을 fmt.Println(col)
으로 변경하면 모든 행의 모든 열이 인쇄됩니다. fmt.Print(col)
으로두면 1 행만 인쇄됩니다. 왜 이런 일이 일어나는 지 아는 사람이 있습니까?
나는 Print
과 Println()
이 같은 방식으로 동작한다고 생각했는데, 단지 println()
이 새로운 라인을 추가합니까?
// sanity check, display to standard output
for _, row := range rawCSVdata {
for _, col := range row {
_,err := fmt.Print(col)
if err != nil {
fmt.Println(err)
}
}
fmt.Println("")
}
readAll() 버전이 작동 했어야하고, 사용할 때 어떤 결과가 나왔습니까? –
1 행에 모든 행을 인쇄하지 않는 것이 확실합니까? – Chris
그래서 Sublime과 같은 텍스트 편집기로 CSV 파일을 열면 CSV 파일이 여러 줄로 나타 났지만 실제로는 Vim에서 "^ M"문자로 구분 된 것은 단지 한 줄이었습니다. 방금 인쇄를 사용하면 마지막 행만 인쇄됩니다 (모든 행을 인쇄하기에는 너무 길기 때문에). 그럼 내 부분에 그냥 멍청한 실수 야. – user3125693