Python上传本地文件至GCP Cloud Storage报FileNotFoundError问题
GCS上传触发FileNotFoundError排查与解决
报错核心信息
调用blob.upload_from_filename()上传本地文件到GCP Cloud Storage时抛出如下错误:
FileNotFoundError: [Errno 2] No such file or directory: 'C:/Users//vithal//test.csv'
排查思路
按优先级从高到低检查:
- 本地路径拼写错误:代码中硬编码的
C://Users//test.csv不符合Windows系统目录结构,C:\Users是系统用户目录根节点,下方必须对应当前登录系统的用户名子目录(从报错路径看你的用户名为vithal),直接在Users根目录查找test.csv必然找不到;同时路径里出现的连续双斜杠//、漏写用户名目录层级是手动拼路径最常见的出错点。 - 路径解析偏差:手动写Windows路径时混用正斜杠、反斜杠、多写斜杠,会导致Python实际解析的路径和预期不一致。
- 文件权限不足:如果路径完全正确仍报错,检查运行Python进程的系统账号是否有目标文件的读取权限。
解决步骤
替换为正确的文件路径
不要手动拼写路径,直接打开Windows资源管理器找到test.csv文件,按住Shift右键点击文件,选择「复制为路径」,把复制到的路径赋值给local_path即可。Python本身支持单正斜杠的Windows路径写法,不需要写双斜杠转义,比如文件放在vithal用户个人目录下时,正确路径为C:/Users/vithal/test.csv。上传前增加路径校验逻辑
在调用上传方法前加校验,提前暴露路径问题,避免SDK抛出不明确的报错:
# 打印Python实际解析的绝对路径,方便核对 print(f"当前待上传文件解析路径:{os.path.abspath(local_path)}") if not os.path.isfile(local_path): raise FileNotFoundError(f"待上传文件不存在,请检查路径配置")
- 用系统API拼接路径,避免手动拼写错误
推荐用os模块内置方法拼接路径,自动适配不同系统的路径规则,不会出现斜杠、目录层级错误:
# 自动获取当前系统登录用户的主目录,Windows下等价于C:/Users/你的用户名 user_home_dir = os.path.expanduser("~") local_path = os.path.join(user_home_dir, "test.csv")
- 修正后的完整代码参考
from google.cloud import storage import os def upload_to_bucket(): storage_client = storage.Client() landing_bucket_name = '123' landing_blob_name = 'test_upload' # 自动拼接正确的本地文件路径 user_home_dir = os.path.expanduser("~") local_path = os.path.join(user_home_dir, "test.csv") # 前置校验 if not os.path.isfile(local_path): raise FileNotFoundError(f"待上传文件不存在,检查路径:{local_path}") bucket = storage_client.get_bucket(landing_bucket_name) blob = bucket.blob(landing_blob_name) blob.upload_from_filename(local_path) return blob.public_url
额外提示:原代码中函数定义传入了
landing_bucket_name参数,函数内部又重新给该变量赋值,属于冗余逻辑,不影响本次报错但可以清理;另外代码里注释掉的print语句存在语法错误,如果要启用需要修正为print(list(storage_client.list_buckets()))。
内容的提问来源于stack exchange,提问作者vithal n
相关产品推荐
相关产品推荐

