此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
投诉之前在QQ小程序看到收集表可以收集图片,但是却只能导出为Excel,用户上传的图片都变成了一个个单元格的超链接。
但是一个一个去下载也太麻烦了吧,听说python可以处理Excel,那我就试着写一下吧
很巧,这次用到的依赖库,基本在安装python时都安装了
直接省去了安装步骤
遇到的问题
- 首先就遇到了文件读取的问题,反复输了很多次都不对 后来查询了资料,发现如果路径中含有中文会报错,需要加
r例如:
1
| xlrd.open_workbook(r'D:\文字')
|
但是我又找到一种解决方法,将python文件和Excel放在一起通过:
1 2 3 4 5
| def get_path(): path = os.path.abspath(__file__) path = os.path.dirname(path) return path
|
获取文件所在目录即可。 2. 因为版本问题,xlrd库最新版只能处理xls,所以xlsx文件必须要打开后另存为xls。 3. 需要注意的是,定位单元格时,如A1应该为(0,0),前面是行后面是列,因此A2为(1,0)
运行
首先随便制成一个Excel
运行python
运行完毕,在文件目录下发现文件夹
(这边确实是放了两张一样的图片)
测试成功
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| import xlrd import os,stat import urllib.request
def get_path(): path = os.path.abspath(__file__) path = os.path.dirname(path) return path print(get_path())
filedata = get_path()+'\\'+input("请输入xls文件名(无需后缀):")+'.xls' print(filedata) data = xlrd.open_workbook(filedata)
file_path = get_path()+'\\'+input("请输入文件保存的文件夹名字:")
ifyg = input('是否每个名字一个文件夹:(y/n)') table = data.sheets()[0] nrows = table.nrows ncols = table.ncols nameid = [] for i in range(ncols): if table.cell(0,i).value == '名字': name = i def download_img(img_url,file_path,file_name): if not os.path.exists(file_path): os.makedirs(file_path) suffix = os.path.splitext(img_url)[1] filename = os.path.join(file_path,file_name + suffix) urllib.request.urlretrieve(img_url,filename=filename) os.chmod(filename,stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) def zuih(id,phoname,link,file_path): if ifyg == 'y': file_paths = file_path+'\\'+id download_img(link,file_paths,phoname) else : phonames = id + phoname download_img(link,file_path,phonames) def get_link(i,name,nrows,table): for j in range(1,nrows): hyperlink_obj = table.hyperlink_map.get((j,i)) link = hyperlink_obj.url_or_path link = link.split('?')[0] id = table.cell(j,name).value print(id) print(link) zuih(id,phoname,link,file_path) for i in range(ncols): values = table.cell(1,i).value if not isinstance(values,str): values = str(values) str1 = 'jpeg' if str1 in values: phoname = table.cell(0,i).value get_link(i,name,nrows,table)
|