Google Colab使用gspread向指定文件夹创建文件报TypeError错误
报错原因
这是gspread版本迭代带来的API不兼容变更导致的:5.0及以上版本的gc.create()方法移除了第二个用于传入文件夹ID的位置参数,方法仅接受「文件名」这一个业务位置参数,加上实例自身的隐式参数,总共只接收2个位置参数。你传入文件名+文件夹ID两个显式参数后总参数数量为3,就触发了该类型错误。
旧版本支持的gc.create(文件名, 文件夹ID)写法已经在新版本中废弃。
修复方案
新版本gspread需要先创建表格,再单独调用Drive能力将文件移动到目标文件夹,步骤如下:
- 先升级gspread到最新版本,避免接口不存在的问题,在Colab单元格先执行命令:
!pip install --upgrade gspread
执行后重启Colab运行时即可。
2. 修正你的业务代码,重点修改创建表格和移动文件的逻辑,同时修复你代码里原有的变量名拼写/大小写错误:
from google.colab import auth auth.authenticate_user() import pandas as pd import gspread from google.auth import default creds, _ = default() gc = gspread.authorize(creds) wb = gc.open('file name') ws = wb.worksheet('sheet name') rows = ws.get_all_values() df = pd.DataFrame.from_records(rows[1:],columns=rows[0]) modisseries = df["column name"] uniquemodis = modisseries.drop_duplicates().tolist() def createSpreadsheet(columnName): # 修复原代码变量名大小写、拼写错误 ndf = df[df["Modis"] == columnName] nlist = [ndf.columns.tolist()] + ndf.to_numpy().tolist() # 仅传入文件名创建表格,默认存在账号根目录 ss = gc.create(columnName) # 调用Drive接口将表格移动到指定文件夹,替换为你实际的文件夹ID gc.drive.move_file(ss.id, "你的目标文件夹ID") nws = ss.sheet1 nws.update_title(columnName) nws.update("A1",nlist,value_input_option="USER_ENTERED") for modis in uniquemodis: createSpreadsheet(modis)
注意事项
- 你原代码存在多处变量名问题:参数名拼写为
columName(漏写字母n)、内部判断用了未定义的Columname(大小写错误+拼写错误),上述修正代码已经统一了变量名,避免触发NameError。 - 确保你使用的服务账号/授权账号有目标文件夹的编辑权限,否则移动文件时会报权限错误。
内容的提问来源于stack exchange,提问作者Muhamad Ardika
相关产品推荐
相关产品推荐

