Я относительно новичок в кодировании и пытаюсь написать скрипт, который будет искать определенные имена файлов в определенном сегменте S3.Если файл доступен, он будет считан через pandas для незначительных правок, а затем выведен локально как новое имя файла.
Я пытаюсь использовать параметры имени файла как функцию, которая, по моему мнению, в конечном итоге вызываетошибка ниже, но не уверен.Любые идеи о том, что в моем коде вызывает эту ошибку и как ее устранить.
File "tester.py", line 23, in <module>
s3.Bucket(bucket_name).download_file(Key,filename)
File "/Users/b/Library/Python/3.5/lib/python/site-packages/boto3/s3/inject.py", line 168, in bucket_download_file
ExtraArgs=ExtraArgs, Callback=Callback, Config=Config)
File "/Users/b/Library/Python/3.5/lib/python/site-packages/boto3/s3/inject.py", line 130, in download_file
extra_args=ExtraArgs, callback=Callback)
File "/Users/b/Library/Python/3.5/lib/python/site-packages/boto3/s3/transfer.py", line 301, in download_file
raise ValueError('Filename must be a string')
ValueError: Filename must be a string
Мой полный код приведен ниже:
import pandas as pd
import fnmatch
import os
import time
import boto3
import botocore
bucket_name = 'data' # replace with your bucket name
Key = 'Setting/incoming/' # replace with your object Key
date = time.strftime("%Y%m%d")
s3 = boto3.resource('s3')
def filename(file):
Accountfile = "accountteam_table.csv"
Subscript = "subscription.csv"
Opportunity = "opportunity.csv"
Subtable = "subscription.csv"
Opttable = "opportunity.csv"
Accounttable = "account.csv"
try:
s3.Bucket(bucket_name).download_file(Key,file)
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
print("The object does not exist.")
else:
path = s3.Bucket(bucket_name,Key)
for file in os.listdir(path):
if fnmatch.fnmatch(file, Accountfile):
df = pd.read_csv(file, delimiter=',',encoding = "ISO-8859-1")
df.drop_duplicates(subset= 'Account Team Member Id', keep='first', inplace=True)
df['date_added'] = ""
df.to_csv('accountteam_table_'+ date + '.csv', sep=',')
#subscription Product and Charge pre-process file
elif fnmatch.fnmatch(file, Subscript):
df = pd.read_csv(file, delimiter=',',encoding = "ISO-8859-1")
df.drop_duplicates(subset= 'Subscription Product & Charge ID', keep='first', inplace=True)
df.drop('Opportunity Name','Account Name','Subscription Name', axis=1)
df['date_added'] = ""
df.to_csv('subscriptionproduct_charge_table_'+ date + '.csv', sep=',')
elif fnmatch.fnmatch(file, Opportunity):
df = pd.read_csv(file, delimiter=',',encoding = "ISO-8859-1")
df.drop_duplicates(subset= 'Opportunity Product Family: ID', keep='first', inplace=True)
df.drop('Opportunity Name','Non-Recurring TCV (OPF) Currency', axis=1)
df['date_added'] = ""
df.to_csv('opportunityproductfamily_table_' + date + '.csv', sep=',')