如何获取AWS S3存储桶中文件的URI路径并编写Python代码用于Transcribe作业
获取AWS S3存储桶中文件的URI用于Amazon Transcribe作业
没问题,我来帮你搞定这个需求。Amazon Transcribe接受的S3文件URI格式是s3://bucket-name/path/to/file,我们可以通过两种方式生成这个URI,根据你的需求选择就行:
方式一:直接构造URI(简单快速)
如果你已经确认文件肯定存在于S3桶中,直接拼接字符串就能得到符合要求的URI,不用调用AWS SDK,效率很高:
bucket_name = 'ABC' folder_path = 'audiofiles/' audio_files = ['audio_one.wav', 'audio_two.mp3'] # 生成每个文件的S3 URI s3_uris = [f's3://{bucket_name}/{folder_path}{file}' for file in audio_files] # 打印结果,直接复制给Transcribe用就行 for uri in s3_uris: print(uri)
运行这段代码后,你会得到:
s3://ABC/audiofiles/audio_one.wav s3://ABC/audiofiles/audio_two.mp3
这两个URI可以直接传给Transcribe的MediaFileUri参数。
方式二:用boto3验证并获取(更严谨)
如果想确保文件确实存在于S3中,避免因路径错误导致Transcribe作业失败,可以用boto3 SDK来列出目录下的文件并自动构造URI:
首先确保你已经安装了boto3:
pip install boto3
然后使用以下代码:
import boto3 def get_s3_file_uris(bucket_name, folder_prefix): # 初始化S3客户端 s3_client = boto3.client('s3') # 列出指定前缀下的所有对象 response = s3_client.list_objects_v2(Bucket=bucket_name, Prefix=folder_prefix) s3_uris = [] # 遍历返回的文件对象,跳过目录本身 if 'Contents' in response: for obj in response['Contents']: if not obj['Key'].endswith('/'): s3_uri = f's3://{bucket_name}/{obj["Key"]}' s3_uris.append(s3_uri) return s3_uris # 调用函数获取URI target_bucket = 'ABC' target_folder = 'audiofiles/' file_uris = get_s3_file_uris(target_bucket, target_folder) # 输出结果 for uri in file_uris: print(uri)
这个方法的好处是:
- 自动验证文件存在性,只返回实际存在的文件URI
- 如果以后
audiofiles目录下新增了其他音频文件,代码会自动包含它们的URI - 避免手动拼接路径时可能出现的拼写错误
额外提示:在Transcribe中使用URI
拿到URI后,你可以直接在Transcribe作业中使用,示例代码如下:
import boto3 transcribe_client = boto3.client('transcribe') # 针对单个文件启动转录作业 transcribe_client.start_transcription_job( TranscriptionJobName='Transcribe-Audio-One', Media={'MediaFileUri': 's3://ABC/audiofiles/audio_one.wav'}, MediaFormat='wav', LanguageCode='en-US' # 根据你的音频语言调整 )
内容的提问来源于stack exchange,提问作者omkargaikwad
相关产品推荐
相关产品推荐

