如何使用Python的S3FS删除文件名中包含破折号和括号的文件?

问题描述 投票:0回答:1

我在 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}')

此方法执行时没有错误,但没有删除任何内容。

如何删除该文件?

python-3.x amazon-s3 boto3 python-s3fs
1个回答
0
投票

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()
© www.soinside.com 2019 - 2024. All rights reserved.