繁体   English   中英

将s3的内容写入CSV

[英]Writing contents of s3 to CSV

我正在创建一个脚本,该脚本将s3数据捕获到本地计算机。 通常,我接收的数据是配置单元分区的数据。 即使文件确实存在,我仍收到No such file or directory错误。 有人可以解释我做错了什么以及我应该如何以不同的方式来对待吗? 这是错误引用的代码:

bucket = conn.get_bucket(bucket_name)
for sub in bucket.list(prefix = 'some_prefix'):
        matched = re.search(re.compile(read_key_pattern), sub.name)
        if matched:
            with open(sub.name, 'rb') as fin:
                reader = csv.reader(fin, delimiter = '\x01')
                contents = [line for line in reader]
            with open('output.csv', 'wb') as fout:
                writer = csv.writer(fout, quotechar = '', quoting = csv.QUOTE_NONE, escapechar = '\\')
                writer.writerows.content

IOError:[Errno 2]没有这样的文件或目录:'my_prefix / 54c91e35-4dd0-4da6-a7b7-283dff0f4483-000000'

该文件存在,并且这是我尝试检索的正确文件夹和文件。

就像@roganjosh所说的那样,似乎在测试名称匹配后您还没有下载文件 我在下面添加了注释,以向您展示如何在python 2中处理内存中的文件:

    from io import StringIO # alternatively use BytesIO
    import contextlib

    bucket = conn.get_bucket(bucket_name)
    # use re.compile outside of the for loop
    # it has slightly better performance characteristics
    matcher = re.compile(read_key_pattern)

    for sub in bucket.list(prefix = 'some_prefix'):
        # bucket.list returns an iterator over s3.Key objects
        # so we can use `sub` directly as the Key object
        matched = matcher.search(sub.name)
        if matched:
            # download the file to an in-memory buffer with contextlib.closing(StringIO()) as fp: sub.get_contents_to_file(fp) fp.seek(0)
                # read straight from the memory buffer
                reader = csv.reader(fp, delimiter = '\x01')
                contents = [line for line in reader]
            with open('output.csv', 'wb') as fout:
                writer = csv.writer(fout, quotechar = '', quoting = csv.QUOTE_NONE, escapechar = '\\')
                writer.writerows.content    

对于python 3,您将需要更改注释中讨论的with语句,以解决此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM