如何用Python在Google Drive上传时替换同名文件
解决Google Drive同名文件重复上传问题
要实现上传时替换同名文件,核心是先检查目标文件夹内是否存在同名文件,存在则更新,不存在则新建。修改后的代码如下:
# create drive api client service = build('drive', 'v3', credentials=credentials) file_name = 'test.csv' target_folder_id = destination_folder_id # 查询目标文件夹中是否存在同名文件 query = f"name='{file_name}' and '{target_folder_id}' in parents and trashed=false" existing_files = service.files().list( q=query, fields='files(id)' ).execute().get('files', []) media = MediaFileUpload( source_file_path, mimetype='text/csv' # 修正:CSV文件正确MIME类型为text/csv ) if existing_files: # 存在同名文件,执行替换更新 file_id = existing_files[0]['id'] file = service.files().update( fileId=file_id, media_body=media ).execute() print(f'已替换现有文件,文件ID: {file.get("id")}') else: # 无同名文件,执行新建 file_metadata = {'name': file_name, 'parents': [target_folder_id]} file = service.files().create( body=file_metadata, media_body=media, fields='id' ).execute() print(f'已创建新文件,文件ID: {file.get("id")}')
关键说明
- 精准查询:通过文件名、目标文件夹ID、未被回收站标记三个条件定位文件,避免误匹配其他位置的同名文件或已删除文件。
- MIME类型修正:原代码中的
file/csv不符合标准,替换为text/csv能保证Drive正确识别文件类型。 - 替换逻辑:找到已存在文件后,调用
files().update方法传入文件ID和新的媒体内容,直接覆盖原文件内容,不会生成重复文件。
内容的提问来源于stack exchange,提问作者Shadow Walker
相关产品推荐
相关产品推荐

