将文件放入 Python 中的变量文件夹时遇到问题
Getting Trouble in Placing files in variable Folder in Python
我正在从 s3 存储桶下载文件,我想将它们放在各自的文件夹中。
with open(wrkbk, 'r') as csvfile:
datareader = csv.reader(csvfile)
for row in datareader:
stage, path = row[0],row[1]
fpath = os.path.join("C://Users//local1//Project101//Images//",stage)
your_bucket.download_file(path,fpath+path)
我要的是图片去
**Images->Stage-1->image1.jpg
Stage-2-> image2.jpg**
.
.
但实际情况是这样的。
Images-> Stage-1image1.jpg, Stage-2image2.jpg
我已经在Image文件夹中制作了所有的舞台文件夹,所以我没有尝试os.makedir()
它不会进入单独的文件夹。我试过做fpath/path,但是它的saying字符串不能分割。
而且它们不会进入文件夹,相反,名称会与文件夹一起保留。
最后一段也需要使用 os.path.join()
,所以有一个斜杠 in-between。
我还添加了 os.path.basename()
,以防 CSV 文件的 path
也有目录部分...
base = "C:/Users/local1/Project101/Images"
with open(wrkbk) as csvfile:
datareader = csv.reader(csvfile)
for stage, path in datareader:
filename = os.path.basename(path)
full_path = os.path.join(base, stage, filename)
your_bucket.download_file(path,full_path)
下面的函数将存储桶路径的所有文件下载到本地目录。
路径是文件的指示 - 当它不以“/”结尾时
它将创建您下载到的根本地目录的递归目录
import boto3
import os
s3 = boto3.resource('s3')
def download_s3_folder(bucket_name, s3_folder, local_dir=None):
bucket = s3.Bucket(bucket_name)
for obj in bucket.objects.filter(Prefix=s3_folder):
if obj.key[-1] == '/':
continue
target = os.path.join(local_dir, os.path.relpath(obj.key, s3_folder))
if not os.path.exists(os.path.dirname(target)):
os.makedirs(os.path.dirname(target))
print(f"downloading {obj.key} to {target}")
bucket.download_file(obj.key, target)
使用示例
download_s3_folder("MY_BUCKET", "PATH/Images/", "./Images")
会将 MY_BUCKET
存储桶中路径 PATH/Images/
中的所有内容下载到当前工作目录 运行 目录 ./Images
中的脚本并将保留 files/paths结构
为了在保持 files/paths 结构的同时下载所有存储桶内容,请使用 -
download_s3_folder("MY_BUCKET", "", "./my-bucket-content")
我正在从 s3 存储桶下载文件,我想将它们放在各自的文件夹中。
with open(wrkbk, 'r') as csvfile:
datareader = csv.reader(csvfile)
for row in datareader:
stage, path = row[0],row[1]
fpath = os.path.join("C://Users//local1//Project101//Images//",stage)
your_bucket.download_file(path,fpath+path)
我要的是图片去
**Images->Stage-1->image1.jpg
Stage-2-> image2.jpg**
.
.
但实际情况是这样的。
Images-> Stage-1image1.jpg, Stage-2image2.jpg
我已经在Image文件夹中制作了所有的舞台文件夹,所以我没有尝试os.makedir()
它不会进入单独的文件夹。我试过做fpath/path,但是它的saying字符串不能分割。
而且它们不会进入文件夹,相反,名称会与文件夹一起保留。
最后一段也需要使用 os.path.join()
,所以有一个斜杠 in-between。
我还添加了 os.path.basename()
,以防 CSV 文件的 path
也有目录部分...
base = "C:/Users/local1/Project101/Images"
with open(wrkbk) as csvfile:
datareader = csv.reader(csvfile)
for stage, path in datareader:
filename = os.path.basename(path)
full_path = os.path.join(base, stage, filename)
your_bucket.download_file(path,full_path)
下面的函数将存储桶路径的所有文件下载到本地目录。 路径是文件的指示 - 当它不以“/”结尾时 它将创建您下载到的根本地目录的递归目录
import boto3
import os
s3 = boto3.resource('s3')
def download_s3_folder(bucket_name, s3_folder, local_dir=None):
bucket = s3.Bucket(bucket_name)
for obj in bucket.objects.filter(Prefix=s3_folder):
if obj.key[-1] == '/':
continue
target = os.path.join(local_dir, os.path.relpath(obj.key, s3_folder))
if not os.path.exists(os.path.dirname(target)):
os.makedirs(os.path.dirname(target))
print(f"downloading {obj.key} to {target}")
bucket.download_file(obj.key, target)
使用示例
download_s3_folder("MY_BUCKET", "PATH/Images/", "./Images")
会将 MY_BUCKET
存储桶中路径 PATH/Images/
中的所有内容下载到当前工作目录 运行 目录 ./Images
中的脚本并将保留 files/paths结构
为了在保持 files/paths 结构的同时下载所有存储桶内容,请使用 -
download_s3_folder("MY_BUCKET", "", "./my-bucket-content")