4

我正在尝试访问 S3 上的行分隔 JSON 数据。根据我对文档的理解,我应该能够做类似的事情

print data(S3(Chunks(JSONLines))('s3://KEY:SECRET@bucket/dir/part-*.json').peek()

抛出

BotoClientError: BotoClientError: Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format.

我已经尝试过导致不同错误的变化。

我可以获得以下内容来处理本地文件:

print data(chunks(JSONLines)(map(JSONLines, glob("/home/me/data/*")))).peek()

不过,我不确定为什么(map(JSONLines, glob(需要它。

我不太了解如何使用类型修饰符

4

1 回答 1

1

在此页面http://www.programcreek.com/python/example/51587/boto.exception.BotoClientError的示例 6的评论部分中指出:

存储桶名称不得包含大写字符。我们通过附加一个小写字符并使用 islower() 进行测试来检查这一点。请注意,这也包括带有破折号的数字存储桶名称等情况。

用于此评估的函数是check_lowercase_bucketname(n) ,通过示例调用,我们得到:

>>> check_lowercase_bucketname("Aaaa")
Traceback (most recent call last):
...
BotoClientError: S3Error: Bucket names cannot contain upper-case
characters when using either the sub-domain or virtual hosting calling
format.

>>> check_lowercase_bucketname("1234-5678-9123")
True
>>> check_lowercase_bucketname("abcdefg1234")
True

上面提到的,让我相信你的调用's3://KEY:SECRET@bucket/dir/part-*.json'没有通过,因为KEY和/或SECRET变量包含大写或不允许的字符

于 2017-03-09T21:26:26.463 回答