用Python导入并保存公开Google Sheets导出的CSV文件
问题修复方案
原代码核心错误点
urllib2.urlopen(url)返回的是字节流对象,csv.reader要求传入文本迭代对象,直接传入会触发类型不匹配报错csv.reader迭代返回的row是列表格式,f.write()仅支持写入字符串,直接写入列表会触发类型错误f.close()写在for循环内部,第一次循环执行后文件就被关闭,后续行无法写入;且with语法会自动管理文件关闭,手动调用属于多余操作- 额外冗余问题:无需额外用
csv模块解析,只要请求到CSV的文本内容直接写入文件即可,反而能减少不必要的解析开销
可用修复代码
方案1:精简版(无需csv模块,直接保存原始CSV内容)
import urllib.request as urllib2 url = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vSsbo0nGQZsYG0kEUC2dZnml_nIOp6q_KnhW8UmGQ39wafmWZQKg9Sb0u4ivBnXt3xrbJgBghpN6rNB/pub?gid=1242503396&single=true&output=csv' response = urllib2.urlopen(url) # 把字节流解码为UTF-8文本 csv_content = response.read().decode('utf-8') with open("My_List.csv", "w", newline="", encoding="UTF-8") as f: f.write(csv_content)
方案2:如果确实需要用csv模块读写(比如要中途修改行内容)
import csv import urllib.request as urllib2 from io import TextIOWrapper url = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vSsbo0nGQZsYG0kEUC2dZnml_nIOp6q_KnhW8UmGQ39wafmWZQKg9Sb0u4ivBnXt3xrbJgBghpN6rNB/pub?gid=1242503396&single=true&output=csv' response = urllib2.urlopen(url) # 把字节流包装为文本流给csv.reader使用 cr = csv.reader(TextIOWrapper(response, encoding='utf-8')) with open("My_List.csv", "w+", newline="", encoding="UTF-8") as f: writer = csv.writer(f) writer.writerows(cr)
内容的提问来源于stack exchange,提问作者Digital Farmer
相关产品推荐
相关产品推荐

