Python 当我尝试使用boto3将文件上载到S3时,找不到文件

Python 当我尝试使用boto3将文件上载到S3时,找不到文件,python,amazon-web-services,Python,Amazon Web Services,我正在YouTube上学习一个关于如何使用Python在S3中自动上传文件的简单教程,我发现这个错误显示: FileNotFoundError: [WinError 2] The system cannot find the file specified: 'age.csv' 这对我来说毫无意义,因为文件就在那里。例如,我的代码如下所示: client = boto3.client('s3', aws_access_key_id=access_key

我正在YouTube上学习一个关于如何使用Python在S3中自动上传文件的简单教程,我发现这个错误显示:

FileNotFoundError: [WinError 2] The system cannot find the file specified: 'age.csv'
这对我来说毫无意义,因为文件就在那里。例如,我的代码如下所示:

client = boto3.client('s3',
                      aws_access_key_id=access_key,
                      aws_secret_access_key=secret_access_key)

path = 'C:/Users/User/Desktop/python/projects/AWS-Data-Processing/example_data'

for file in os.listdir(path):
    upload_file_bucket = 'my-uploaded-data'
    print(file)
    if '.txt' in file:
        upload_file_key_txt = 'txt/' + str(file)
        client.upload_file(file, upload_file_bucket, upload_file_key_txt)
        print("txt")
    elif '.csv' in file:
        upload_file_key_csv = 'csv/' + str(file)
        client.upload_file(file, upload_file_bucket, upload_file_key_csv)
        print("csv")
当我把它说的部分注释掉时:

client.upload_file(file, upload_file_bucket, upload_file_key_txt)
它会打印出“txt”或“cvs”,我会对其进行注释,以便只读取以下文件:

for file in os.listdir(path):
    upload_file_bucket = 'my-uploaded-data'
    print(file)
然后它成功地打印出文件名。所以我不明白为什么我会得到这样的错误:当存在文件时,没有文件存在。这听起来很矛盾,我需要一些帮助来理解这个错误。 我读了一篇文章,在那里我可能需要下载AWS CLI,所以我下载了,但没有帮助。我猜问题在于函数
upload\u file
,但我不明白为什么没有文件?
任何建议都将不胜感激

上传文件功能采用完整的文件路径,而不仅仅是名称。它无法猜出您的目录是什么,因此您需要在它前面加上前缀,或者使用不同的方式对文件进行迭代


来源:

上传文件功能采用完整的文件路径,而不仅仅是名称。它无法猜出您的目录是什么,因此您需要在它前面加上前缀,或者使用不同的方式对文件进行迭代


来源:

对不起,你能详细解释一下“获取完整文件路径”是什么意思吗?这是否意味着上载文件就像在我的整个计算机中搜索文件,而不是我指定的路径?您只向
上载文件
功能提供了
age.csv
。它永远不可能确切地知道您正在谈论哪个文件。如果文档中有一个,桌面上有一个,下载中有一个呢?这就是为什么您应该提供文件的确切位置,例如:
C:/Users/User/Desktop/python/projects/AWS Data Processing/example\u Data/age.csv
。换句话说,上传
path+file
,而不仅仅是
file
。您可以执行
.upload_文件(f'{path}/file')
。另外,我实际上会将
文件
重命名为
文件名
,因为这就是它的真正含义。绝对不是文件对象。谢谢!我现在明白它的意思了。真不敢相信我花了一天的时间才知道这一点……对不起,你能详细解释一下“获取完整文件路径”是什么意思吗?这是否意味着上载文件就像在我的整个计算机中搜索文件,而不是我指定的路径?您只向
上载文件
功能提供了
age.csv
。它永远不可能确切地知道您正在谈论哪个文件。如果文档中有一个,桌面上有一个,下载中有一个呢?这就是为什么您应该提供文件的确切位置,例如:
C:/Users/User/Desktop/python/projects/AWS Data Processing/example\u Data/age.csv
。换句话说,上传
path+file
,而不仅仅是
file
。您可以执行
.upload_文件(f'{path}/file')
。另外,我实际上会将
文件
重命名为
文件名
,因为这就是它的真正含义。绝对不是文件对象。谢谢!我现在明白它的意思了。真不敢相信我花了一天的时间才知道。。。。。。