<p>我建议使用标准库的一些特性。正如Martijn Pieters所说,您应该将您的<code>file</code>变量重命名为<code>target_directory</code>或类似的名称,因为如果您不这样做,可能会使代码的读者感到困惑:</p>
<pre><code>for fileinfo in response['Contents']:
filepath_retrieved = fileinfo['Key']
if key in filepath_retrieved:
pathname_retrieved, filename_retrieved = os.path.split(filepath_retrieved)
if pathname_retrieved:
if filename_retrieved:
os.makedirs(target_directory, exist_ok=True)
output_filepath = os.path.join(target_directory, filename_retrieved)
self._s3.download_file(bucket, filepath_retrieved, output_filepath)
else:
output_filepath = target_directory
self._s3.download_file(bucket, filepath_retrieved, output_filepath)
</code></pre>
<p>使用的功能包括:</p>
<ul>
<li><a href="https://docs.python.org/3/library/os.path.html#os.path.split" rel="nofollow noreferrer">^{<cd3>}</a>而不是str.rsplit公司()或str.r分区()因为当您尝试执行<code>fileinfo['Key'].rsplit('/', 1)</code>时,您似乎希望在文件路径的末尾检索文件名</li>
<li><code>exist_ok</code>参数是<a href="https://docs.python.org/3/library/os.html#os.makedirs" rel="nofollow noreferrer">^{<cd6>}</a>的,所以在创建目录之前不必担心目录的存在。在</li>
</ul>