从转录作业的 S3 对象键中删除特殊字符
Remove special characters from S3 object key for Transcribe job
这是我创建的第一个 Lambda 函数,在今天之前我从未写过一行 Python。我确实有 Salesforce 的 APEX 语言的编程经验,所以我能理解其中的大部分内容。
我有这个 Lambda 函数,它从 S3 抓取一个对象 (wav) 并将其发送到 AWS Transcribe。我希望 Transcribe 作业的名称是 S3 对象的名称,如果名称很简单,例如“recording.wav”,我就可以完成该名称。当我有一个像“4A6E388B48D454FA993D52611ADD1AB_INT - Integris Health_epowell@bcinsourcing.com_8082924979__2_X - Survey.wav”这样的复杂名称时,我的问题就来了,因为特殊字符把事情搞砸了。
谁能告诉我一个简单的方法来删除所有这些特殊字符并用下划线替换它们?我尝试使用 unquote_plus 但它没有解决我的问题。
这是 lambda 代码:
import boto3
from urllib.parse import unquote_plus
#Create low level clients for s3 and Transcribe
s3 = boto3.client('s3')
transcribe = boto3.client('transcribe')
def lambda_handler(event, context):
#parse out the bucket & file name from the event handler
for record in event['Records']:
file_bucket = record['s3']['bucket']['name']
file_name = record['s3']['object']['key']
file_name_only = unquote_plus(record['s3']['object']['key'])
object_url = 'https://s3.amazonaws.com/{0}/{1}'.format(file_bucket, file_name)
response = transcribe.start_transcription_job(
TranscriptionJobName=file_name_only,
LanguageCode='en-US',
MediaFormat='wav',
Media={
'MediaFileUri': object_url
})
print(response)
这是来自 AWS CloudWatch 的错误:
您可以使用简单的正则表达式来替换所有非字母数字字符:
# Just for testing
record = {'s3': {'object': {'key': 'path/to/bad - file@with:symbols!.wav'}}}
import re
# Use a simple regexp to replace all non alphanumeric characters
file_name_only = re.sub("[^a-zA-Z0-9]", "_", record['s3']['object']['key'])
print(file_name_only)
# Outputs: path_to_bad___file_with_symbols__wav
这是我创建的第一个 Lambda 函数,在今天之前我从未写过一行 Python。我确实有 Salesforce 的 APEX 语言的编程经验,所以我能理解其中的大部分内容。
我有这个 Lambda 函数,它从 S3 抓取一个对象 (wav) 并将其发送到 AWS Transcribe。我希望 Transcribe 作业的名称是 S3 对象的名称,如果名称很简单,例如“recording.wav”,我就可以完成该名称。当我有一个像“4A6E388B48D454FA993D52611ADD1AB_INT - Integris Health_epowell@bcinsourcing.com_8082924979__2_X - Survey.wav”这样的复杂名称时,我的问题就来了,因为特殊字符把事情搞砸了。
谁能告诉我一个简单的方法来删除所有这些特殊字符并用下划线替换它们?我尝试使用 unquote_plus 但它没有解决我的问题。
这是 lambda 代码:
import boto3
from urllib.parse import unquote_plus
#Create low level clients for s3 and Transcribe
s3 = boto3.client('s3')
transcribe = boto3.client('transcribe')
def lambda_handler(event, context):
#parse out the bucket & file name from the event handler
for record in event['Records']:
file_bucket = record['s3']['bucket']['name']
file_name = record['s3']['object']['key']
file_name_only = unquote_plus(record['s3']['object']['key'])
object_url = 'https://s3.amazonaws.com/{0}/{1}'.format(file_bucket, file_name)
response = transcribe.start_transcription_job(
TranscriptionJobName=file_name_only,
LanguageCode='en-US',
MediaFormat='wav',
Media={
'MediaFileUri': object_url
})
print(response)
这是来自 AWS CloudWatch 的错误:
您可以使用简单的正则表达式来替换所有非字母数字字符:
# Just for testing
record = {'s3': {'object': {'key': 'path/to/bad - file@with:symbols!.wav'}}}
import re
# Use a simple regexp to replace all non alphanumeric characters
file_name_only = re.sub("[^a-zA-Z0-9]", "_", record['s3']['object']['key'])
print(file_name_only)
# Outputs: path_to_bad___file_with_symbols__wav