Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将多个文件夹中的相同文件合并为一个文件s3_Python_Amazon S3_Boto3 - Fatal编程技术网

Python 如何将多个文件夹中的相同文件合并为一个文件s3

Python 如何将多个文件夹中的相同文件合并为一个文件s3,python,amazon-s3,boto3,Python,Amazon S3,Boto3,如果我在S3中的多个文件夹中有一个文件,如何使用boto3 python将它们组合在一起 在桶里说我有 bucket_a ts ts_folder a_date.csv b_date.csv c_date.csv d_date.csv ts_folder2 a_date.csv b_date.csv c_date.csv

如果我在S3中的多个文件夹中有一个文件,如何使用boto3 python将它们组合在一起

在桶里说我有

bucket_a
   ts
     ts_folder
          a_date.csv
          b_date.csv
          c_date.csv
          d_date.csv

     ts_folder2
          a_date.csv
          b_date.csv
          c_date.csv
          d_date.csv
我需要将这两个文件合并成一个文件,同时忽略第二个文件中的头文件


我正试图找出如何使用python或aws实现这一目标,请尝试类似的方法。我假设您已在系统上正确设置了AWS凭据。我的建议是首先将CSV的行添加到一个新变量中。对于第二个CSV,您将跳过第一行。找到所有行后,将它们作为字符串连接起来,以便将它们写入S3对象

导入boto3
#输出将包含CSV行
输出=[]
以open(“first.csv”、“r”)作为fh:
output.extend(fh.readlines())
以open(“second.csv”、“r”)作为fh:
#箕斗式掘进机
output.extend(fh.readlines()[1:]
#将这些行组合成字符串
body=”“.join(输出)
#创建S3客户端(假设已设置凭据)
s3_client=boto3.客户端(“s3”)
#写入对象
s3\u客户端。放置\u对象(Bucket=“my Bucket”,
Key=“combined.csv”,
车身=车身)
更新 这将帮助您进行S3设置

导入boto3
session=boto3.session.session(profile_name='dev')
s3_client=会话客户端(“s3”)
bucket=“我的桶”
文件=[]
对于s3_client.list_objects_v2(Bucket=Bucket,Prefix=“ts/”[“Contents]”中的项:
如果项['Key'].endswith(“.csv”):
追加(项['Key'])
输出=[]
对于文件中的文件:
body=s3\u client.get\u对象(Bucket=Bucket,
Key=file)[“Body”].read()
output.append(正文)
#将这些行组合成字符串
outputbody=“”.join(输出)
#写入对象
s3_客户端。放置_对象(Bucket=Bucket,
Key=“combined.csv”,
正文=输出正文)

试试这样的方法。我假设您已在系统上正确设置了AWS凭据。我的建议是首先将CSV的行添加到一个新变量中。对于第二个CSV,您将跳过第一行。找到所有行后,将它们作为字符串连接起来,以便将它们写入S3对象

导入boto3
#输出将包含CSV行
输出=[]
以open(“first.csv”、“r”)作为fh:
output.extend(fh.readlines())
以open(“second.csv”、“r”)作为fh:
#箕斗式掘进机
output.extend(fh.readlines()[1:]
#将这些行组合成字符串
body=”“.join(输出)
#创建S3客户端(假设已设置凭据)
s3_client=boto3.客户端(“s3”)
#写入对象
s3\u客户端。放置\u对象(Bucket=“my Bucket”,
Key=“combined.csv”,
车身=车身)
更新 这将帮助您进行S3设置

导入boto3
session=boto3.session.session(profile_name='dev')
s3_client=会话客户端(“s3”)
bucket=“我的桶”
文件=[]
对于s3_client.list_objects_v2(Bucket=Bucket,Prefix=“ts/”[“Contents]”中的项:
如果项['Key'].endswith(“.csv”):
追加(项['Key'])
输出=[]
对于文件中的文件:
body=s3\u client.get\u对象(Bucket=Bucket,
Key=file)[“Body”].read()
output.append(正文)
#将这些行组合成字符串
outputbody=“”.join(输出)
#写入对象
s3_客户端。放置_对象(Bucket=Bucket,
Key=“combined.csv”,
正文=输出正文)

您能告诉我们您已经尝试过什么吗?显示读取文件的代码,并使用
boto3
在S3上创建对象。虽然可以通过将多个文件作为源文件读入并复制到同一目标文件来“合并”S3文件,但这将不允许编辑文件。由于您希望从第二个文件中删除头文件,因此需要按照@JQadrad的建议,通过Python脚本处理这些文件。您可以向我们展示您已经尝试过的内容吗?显示读取文件的代码,并使用
boto3
在S3上创建对象。虽然可以通过将多个文件作为源文件读入并复制到同一目标文件来“合并”S3文件,但这将不允许编辑文件。由于您希望从第二个文件中删除头文件,因此需要按照@JQadrad的建议,通过Python脚本处理这些文件。由于这些文件已经在s3存储桶中,如何将所有类似的文件合并到“ts”文件夹下。重要的是,“ts”中的文件夹数只能是一个或多个,具体取决于文件中的文件数sftp@Kar,请查看更新。这应该让你开始了,我想。非常感谢,我会尝试一下这个逻辑。你能检查一下这个s3_钩子吗?我不知道哪个函数能像你在代码中那样获取所有对象。这对文件夹中的一个文件很好,我在每个文件夹中有多个不同的文件。。。我已经更新了原始路径结构,因为文件已经在s3存储桶中,我如何将所有类似的文件合并到“ts”文件夹下呢。重要的是,“ts”中的文件夹数只能是一个或多个,具体取决于文件中的文件数sftp@Kar,请查看更新。这应该让你开始了,我想。非常感谢,我会尝试一下这个逻辑。你能检查一下这个s3_钩子吗?我不知道哪个函数能像你在代码中那样获取所有对象。这对文件夹中的一个文件很好,我在每个文件夹中有多个不同的文件。。。我已经更新了原始路径结构