我在 S3 中有一个名为
data_[2022-10-03:2022-10-23].csv.gzip
的文件,位于名为 s3://<bucket_name>/data/cache/
的存储桶和文件夹中
我正在尝试使用 S3FS 删除此文件。当我尝试这样做时:
filename = 'data_[2022-10-03:2022-10-23].csv.gzip'
data_filepath = 's3://<bucket_name>/data/cache'
fs.rm(f"{data_filepath}/{filename}")
但是 rm 调用抛出异常:
error('bad character range 2-1 at position 54')
它似乎认为这是一个正则表达式。
我尝试用以下方法逃避它:
filename = filename.replace('[', '\\[').replace(']', '\\]').replace('-', '\\-')
但我遇到了同样的错误:
('bad character range \\\\-1 at position 57',)
我也尝试过
re.escape()
:
fs.rm(f"{data_filepath}/{re.escape(filename)}")
但我明白:
error('bad character range \\\\-1 at position 57')
同样的事情。
我尝试了删除方法:
fs.delete(f"{data_filepath}/{filename}")
同样的错误。
我尝试访问底层boto3并直接删除:
bucket_name = '<bucket_name>'
path = 'data/cache'
filename = 'data_[2022-10-03:2022-10-23].csv.gzip'
fs.s3.delete_object(Bucket=bucket_name, Key=f'{path}/{filename}')
此方法执行时没有错误,但没有删除任何内容。
如何删除该文件?
用
boto3
进行测试,如下所示,看看它按原样删除文件:
import boto3
def s3_delete():
fs = boto3.client('s3', aws_access_key_id="########", aws_secret_access_key="########")
bucket_name = '<bucket-name>'
path = 'data/cache'
filename = 'data_[2022-10-03:2022-10-23].csv.gzip'
fs.delete_object(Bucket=bucket_name, Key=f'{path}/{filename}')
s3_delete()