我有以下代码来检查s3 bucket
中是否存在文件。我给程序一个目录,我试图上传该目录中的所有文件。但是我不知道为什么我一直遇到OSError: [Errno 2] No such file or directory: 'foo.txt'
错误。这是我的代码
def s3_has_uptodate_file(bucket, transfer_file, source_size):
bucket = Bucket(conn, default_bucket)
s3_key = bucket.get_key(os.path.basename(transfer_file))
if s3_key:
s3_size = s3_key.size
local_size = source_size
s3_time = rfc822.mktime_tz(rfc822.parsedate_tz(s3_key.last_modified))
local_time = os.path.getmtime(os.path.basename(transfer_file)) #fails here
return s3_size == local_size and s3_time >= local_time
return False
我检查了我的stackdata,我的存储桶名称正确,传输文件为/Users/merlin/Desktop/test_folder/foo.txt
,源大小为141
(正确大小)。
我将以下几行代码放入一个新文件中进行测试,并且运行完美。
import os
transfer_file = '/Users/merlin/Desktop/test_folder/foo.txt'
local_time = os.path.getmtime(os.path.basename(transfer_file))
print local_time
答案 0 :(得分:2)
os.path.basename(transfer_file)
将仅返回路径中的文件名。这是来自任何os.path
方法的前瞻性的相对路径。除非您从"foo.txt"
所在的目录运行该程序,否则os.path.getmtime
肯定会失败。您需要将绝对路径传递给"foo.txt"
。您可能只想使用os.path.getmtime(transfer_file)
。