amazon-web-services - Golang 从 S3 读取固定宽度的文本文件
问题描述
我正在尝试使用此库从 S3 读取固定宽度的文件。它需要一个 io.Reader,到目前为止,这就是我所拥有的:
import (
"bufio"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/o1egl/fwencoder"
)
type leRecord struct {
fullName string
firstName string
lastName string
primaryAddress string
city string
state string
zipcode string
MailKey string
}
func main() {
getObjectReturnMaps("key", "bucket")
}
func getObjectReturnMaps(key, bucket string) {
// Initialize an AWS session with configured credentials
sess, err := session.NewSession(&aws.Config{
Region: aws.String("us-east-1")},
)
if err != nil {
panic(err)
}
// Define client
s3Client := s3.New(sess)
// Using the key, get the object from the bucket
obj, err := s3Client.GetObject(&s3.GetObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(key),
})
if err != nil {
fmt.Println(err)
}
// Read the body, parse it into variable
var records []leRecord
reader := bufio.NewReader(obj.Body)
err = fwencoder.UnmarshalReader(reader, &records)
if err != nil {
fmt.Println("Error", err)
}
fmt.Println(records)
}
但是打印记录变量会返回空白:
[{ } { } { } { } { }......]
但如果我打印阅读器,它显然具有价值:
&{[32 32 88 10 84 82 69 65 68 87 69 76 76 32 32 68 65 78 73 69 76 32 32 82... ]
所以我想知道我哪里出错了。是因为我通过 abufio.Reader
而不是 aio.Reader
吗?
编辑:
以下是一些示例数据:
John Smith J 123 Street Name SampleTown NY 12345 X
Jane Smith J 456 Name Street Anywhere TX 78901 X
这些文件中没有列标题
解决方案
正如 Marc 所评论的,fwencoder将文件的第一行视为标题。
https://github.com/o1egl/fwencoder/blob/8a2f1ab8210ee2018fd171ea1bea94eaa64d043c/decoder.go#L120
if !isHeaderParsed {
isHeaderParsed = true
headersLength = len(lineRunes)
columns, err = parseHeaders(line, columnNames)
if err != nil {
return err
}
continue
}
因此,如果您可以控制写入 s3 的文件,请尝试添加标题,或者如果您确定列的顺序,您可以依赖“encoding/csv”,例如这里
推荐阅读
- javascript - ajax 工作,但它不插入到我的 sql 查询 (js/php)
- java - 如何使用 Kotlin 和 jackson ObjectMapper 从 json 中删除属性
- php - 正则表达式查找忽略所有非数字字符的数字
- c# - 为什么在成功验证令牌后身份验证失败?
- javafx-8 - 如何在 Javafx 8 中获得可编辑的 Textflow?
- c# - 如何在自定义 Unity3D Inspector 中“ping”文本文件?
- angular - 以角度发布后重定向
- java - fastjson 无法正确传输复杂对象或我使用的演员阵容错误?
- java - java - keycloak 无法获取用户主体
- javascript - 如何在 pug 元素中调用 javascript 函数