使用pygsheets从Google Sheets列随机取值仅返回首字符的问题求助
问题解决:pygsheets get_col返回首字符而非完整字符串
问题原因
get_col方法默认参数returnas='matrix',返回的是二维列表(每个单元格值被包裹在子列表中),示例结构如下:
[['BLLR48IQR9'], ['CLL45G3WMP'], ['WLL31HGJ64'], ...]
当执行random.choice(values)时,得到的是['BLLR48IQR9']这类子列表,若后续将其当作字符串处理(或因函数返回类型标注错误导致隐式转换),就会只取到首字符。
修复方案
方案1:修改get_col的returnas参数
调用get_col时指定returnas='list',直接获取一维字符串列表:
def search_promo_name2( self, data: List[List[Union[str, bool]]], search_col: int = 1, promo_col: int = 2 ) -> str: # 修正返回类型为字符串 googlesheet_client: pygsheets.client.Client = self._get_googlesheet_client() wks: pygsheets.Spreadsheet = self._get_googlesheet2_by_url(googlesheet_client) # 指定returnas='list'获取一维列表 values = wks.get_col(promo_col, include_empty=False, returnas='list') if not values: return "" # 替代原返回-1的逻辑,符合字符串返回类型 promo = random.choice(values) return promo
方案2:从二维列表中提取子列表元素
若保持默认returnas='matrix',需从选中的子列表中取出第一个元素:
def search_promo_name2( self, data: List[List[Union[str, bool]]], search_col: int = 1, promo_col: int = 2 ) -> str: # 修正返回类型为字符串 googlesheet_client: pygsheets.client.Client = self._get_googlesheet_client() wks: pygsheets.Spreadsheet = self._get_googlesheet2_by_url(googlesheet_client) values = wks.get_col(promo_col, include_empty=False) if not values: return "" # 从子列表中提取目标字符串 promo = random.choice(values)[0] return promo
额外注意点
原函数返回类型标注-> int错误,需改为-> str匹配实际返回值类型;同时原return -1的逻辑不符合字符串返回要求,建议改为返回空字符串或None,根据业务需求调整。
内容的提问来源于stack exchange,提问作者ShinLun
相关产品推荐
相关产品推荐

