-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path211116-使用Python读取Excel中的图片并对应到记录.html
26 lines (26 loc) · 32.2 KB
/
211116-使用Python读取Excel中的图片并对应到记录.html
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
<!DOCTYPE html><html lang="zh-CN"><head><meta name="generator" content="Hexo 3.9.0"><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content><title>使用Python读取Excel中的图片并对应到记录 | zhiheng's blog</title><link rel="stylesheet" type="text/css" href="/css/style.css?v=1.0.0"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/normalize.css/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss/build/pure-min.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss/build/grids-responsive-min.css"><link rel="stylesheet" href="//cdn.jsdelivr.net/npm/[email protected]/css/font-awesome.min.css"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script><link rel="icon" mask sizes="any" href="/img/favicon.ico"><link rel="Shortcut Icon" type="image/x-icon" href="/img/favicon.ico"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="apple-touch-icon-precomposed" href="/apple-touch-icon.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/clipboard/dist/clipboard.min.js"></script><script type="text/javascript" src="//cdn.jsdelivr.net/gh/codeseven/toastr/build/toastr.min.js"></script><link rel="stylesheet" href="//cdn.jsdelivr.net/gh/codeseven/toastr/build/toastr.min.css"></head><body><div class="body_container"><div id="header"><div class="site-name"><h1 class="hidden">使用Python读取Excel中的图片并对应到记录</h1><a id="logo" href="/.">zhiheng's blog</a><p class="description">喜于分享,勤于积累;欢迎关注我的微信公众号:治恒说说</p></div><div id="nav-menu"><a class="current" href="/."><i class="fa fa-home"> 首页</i></a><a href="/archives/"><i class="fa fa-archive"> 归档</i></a><a href="/about/"><i class="fa fa-user"> 关于</i></a><a href="/demo/"><i class="fa fa-square"> 有趣的代码</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title">使用Python读取Excel中的图片并对应到记录</h1><div class="post-meta">2021年11月16日<span> | </span><span class="category"><a href="/categories/Python/">Python</a></span><script src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"></span><span> 阅读</span></span></div><div class="post-content"><h2 id="1、需求"><a href="#1、需求" class="headerlink" title="1、需求"></a>1、需求</h2><p> 有这样一个需求,将采集在 Excel 中的人员信息(包含照片)导入到 Mysql 库。需求很简单,就是读取 Excel 中的数据插入到 Mysql 中的表,问题在于照片怎么读取?</p>
<h2 id="2、分析"><a href="#2、分析" class="headerlink" title="2、分析"></a>2、分析</h2><p> 对于读取文本数据,直接按行读取即可;对于图片,常用做法是,将 Excel 文件的后缀名改为 zip,然后解压文件,对应文件名目录下有一个<code>\xl\media</code>的目录,里面便是我们要照片的图片,然而,他的文件名、文件顺序都是乱的,确定不出图片对应的记录,怎么办呢?其实目录中还有这样一个 xml 文件<code>\xl\drawings\drawing1.xml</code>其中就有图片与记录的对应关系,只要解析 xml 文件就可以了。知道了这个思路,那我们来一步步的实现他。</p>
<h2 id="3、实现"><a href="#3、实现" class="headerlink" title="3、实现"></a>3、实现</h2><p>1、复制并修改指定目录下的文件类型名,将excel后缀名修改为.zip</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">copy_change_file_name</span><span class="params">(file_path, new_type=<span class="string">'.zip'</span>)</span>:</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> isfile_exist(file_path):</span><br><span class="line"> <span class="keyword">return</span> <span class="string">''</span></span><br><span class="line"> extend = os.path.splitext(file_path)[<span class="number">1</span>] <span class="comment"># 获取文件拓展名</span></span><br><span class="line"> <span class="keyword">if</span> extend != <span class="string">'.xlsx'</span> <span class="keyword">and</span> extend != <span class="string">'.xls'</span>:</span><br><span class="line"> print(<span class="string">"It's not a excel file! %s"</span> % file_path)</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"> file_name = os.path.basename(file_path) <span class="comment"># 获取文件名</span></span><br><span class="line"> new_name = str(file_name.split(<span class="string">'.'</span>)[<span class="number">0</span>]) + new_type <span class="comment"># 新的文件名,命名为:xxx.zip</span></span><br><span class="line"></span><br><span class="line"> dir_path = os.path.dirname(file_path) <span class="comment"># 获取文件所在目录</span></span><br><span class="line"> new_path = os.path.join(dir_path, new_name) <span class="comment"># 新的文件路径</span></span><br><span class="line"> <span class="keyword">if</span> os.path.exists(new_path):</span><br><span class="line"> os.remove(new_path)</span><br><span class="line"> shutil.copyfile(file_path, new_path)</span><br><span class="line"> <span class="keyword">return</span> new_path <span class="comment"># 返回新的文件路径,压缩包</span></span><br></pre></td></tr></table></figure>
<p>2、解压文件</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">unzip_file</span><span class="params">(zipfile_path)</span>:</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> isfile_exist(zipfile_path):</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"> <span class="keyword">if</span> os.path.splitext(zipfile_path)[<span class="number">1</span>] != <span class="string">'.zip'</span>:</span><br><span class="line"> print(<span class="string">"It's not a zip file! %s"</span> % zipfile_path)</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"> file_zip = zipfile.ZipFile(zipfile_path, <span class="string">'r'</span>)</span><br><span class="line"> file_name = os.path.basename(zipfile_path) <span class="comment"># 获取文件名</span></span><br><span class="line"> zipdir = os.path.join(os.path.dirname(zipfile_path), str(file_name.split(<span class="string">'.'</span>)[<span class="number">0</span>])) <span class="comment"># 获取文件所在目录</span></span><br><span class="line"> <span class="keyword">for</span> files <span class="keyword">in</span> file_zip.namelist():</span><br><span class="line"> file_zip.extract(files, os.path.join(zipfile_path, zipdir)) <span class="comment"># 解压到指定文件目录</span></span><br><span class="line"> file_zip.close()</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">True</span></span><br></pre></td></tr></table></figure>
<p>3、读取解压后的文件夹,打印图片路径</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">read_img</span><span class="params">(zipfile_path)</span>:</span></span><br><span class="line"> img_dict = dict()</span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> isfile_exist(zipfile_path):</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"> dir_path = os.path.dirname(zipfile_path) <span class="comment"># 获取文件所在目录</span></span><br><span class="line"> file_name = os.path.basename(zipfile_path) <span class="comment"># 获取文件名</span></span><br><span class="line"> pic_dir = <span class="string">'xl'</span> + os.sep + <span class="string">'media'</span> <span class="comment"># excel变成压缩包后,再解压,图片在media目录</span></span><br><span class="line"> pic_path = os.path.join(dir_path, str(file_name.split(<span class="string">'.'</span>)[<span class="number">0</span>]), pic_dir)</span><br><span class="line"></span><br><span class="line"> file_list = os.listdir(pic_path)</span><br><span class="line"> <span class="keyword">for</span> file <span class="keyword">in</span> file_list:</span><br><span class="line"> filepath = os.path.join(pic_path, file)</span><br><span class="line"> print(filepath)</span><br><span class="line"> img_index = int(re.findall(<span class="string">r'image(\d+)\.'</span>, filepath)[<span class="number">0</span>])</span><br><span class="line"> img_dict[img_index] = dict(img_index=img_index, img_path=filepath)</span><br><span class="line"> <span class="keyword">return</span> img_dict</span><br></pre></td></tr></table></figure>
<p>4、解析xml 文件,获取图片在excel表格中的索引位置信息</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">get_img_pos_info</span><span class="params">(zip_file_path, img_dict, img_feature)</span>:</span></span><br><span class="line"> <span class="string">"""解析xml 文件,获取图片在excel表格中的索引位置信息"""</span></span><br><span class="line"> os.path.dirname(zip_file_path)</span><br><span class="line"> dir_path = os.path.dirname(zip_file_path) <span class="comment"># 获取文件所在目录</span></span><br><span class="line"> file_name = os.path.basename(zip_file_path) <span class="comment"># 获取文件名</span></span><br><span class="line"> xml_dir = <span class="string">'xl'</span> + os.sep + <span class="string">'drawings'</span> + os.sep + <span class="string">'drawing1.xml'</span></span><br><span class="line"> xml_path = os.path.join(dir_path, str(file_name.split(<span class="string">'.'</span>)[<span class="number">0</span>]), xml_dir)</span><br><span class="line"> image_info_dict = parse_xml(xml_path, img_dict, img_feature=img_feature) <span class="comment"># 解析xml 文件, 返回图片索引位置信息</span></span><br><span class="line"> <span class="keyword">return</span> image_info_dict</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重命名解压获取图片位置,及图片表格索引信息</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">get_img_info</span><span class="params">(excel_file_path, img_feature)</span>:</span></span><br><span class="line"> <span class="keyword">if</span> img_feature <span class="keyword">not</span> <span class="keyword">in</span> [<span class="string">"img_index"</span>, <span class="string">"img_path"</span>, <span class="string">"img_base64"</span>]:</span><br><span class="line"> <span class="keyword">raise</span> Exception(<span class="string">'图片返回参数错误, ["img_index", "img_path", "img_base64"]'</span>)</span><br><span class="line"> zip_file_path = copy_change_file_name(excel_file_path)</span><br><span class="line"> <span class="keyword">if</span> zip_file_path != <span class="string">''</span>:</span><br><span class="line"> <span class="keyword">if</span> unzip_file(zip_file_path):</span><br><span class="line"> img_dict = read_img(zip_file_path)</span><br><span class="line"> image_info_dict = get_img_pos_info(zip_file_path, img_dict, img_feature)</span><br><span class="line"> <span class="keyword">return</span> image_info_dict</span><br><span class="line"> <span class="keyword">return</span> dict()</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># 解析xml文件并获取对应图片位置</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">parse_xml</span><span class="params">(file_name, img_dict, img_feature=<span class="string">'img_path'</span>)</span>:</span></span><br><span class="line"> <span class="comment"># 得到文档对象</span></span><br><span class="line"> image_info = dict()</span><br><span class="line"> dom_obj = xmldom.parse(file_name)</span><br><span class="line"> <span class="comment"># 得到元素对象</span></span><br><span class="line"> element = dom_obj.documentElement</span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">_f</span><span class="params">(subElementObj)</span>:</span></span><br><span class="line"> <span class="keyword">for</span> anchor <span class="keyword">in</span> subElementObj:</span><br><span class="line"> xdr_from = anchor.getElementsByTagName(<span class="string">'xdr:from'</span>)[<span class="number">0</span>]</span><br><span class="line"> col = xdr_from.childNodes[<span class="number">0</span>].firstChild.data <span class="comment"># 获取标签间的数据</span></span><br><span class="line"> row = xdr_from.childNodes[<span class="number">2</span>].firstChild.data</span><br><span class="line"> embed = \</span><br><span class="line"> anchor.getElementsByTagName(<span class="string">'xdr:pic'</span>)[<span class="number">0</span>].getElementsByTagName(<span class="string">'xdr:blipFill'</span>)[<span class="number">0</span>].getElementsByTagName(<span class="string">'a:blip'</span>)[<span class="number">0</span>].getAttribute(<span class="string">'r:embed'</span>) <span class="comment"># 获取属性</span></span><br><span class="line"> image_info[(int(row), int(col))] = img_dict.get(int(embed.replace(<span class="string">'rId'</span>, <span class="string">''</span>)), {}).get(img_feature)</span><br><span class="line"></span><br><span class="line"> sub_twoCellAnchor = element.getElementsByTagName(<span class="string">"xdr:twoCellAnchor"</span>)</span><br><span class="line"> sub_oneCellAnchor = element.getElementsByTagName(<span class="string">"xdr:oneCellAnchor"</span>)</span><br><span class="line"> _f(sub_twoCellAnchor)</span><br><span class="line"> _f(sub_oneCellAnchor)</span><br><span class="line"> <span class="keyword">return</span> image_info</span><br></pre></td></tr></table></figure>
<p>5、读取包含图片的excel数据</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">read_excel_info</span><span class="params">(file_path, img_col_index, img_feature=<span class="string">'img_path'</span>)</span>:</span></span><br><span class="line"> img_info_dict = get_img_info(file_path, img_feature)</span><br><span class="line"> book = xlrd.open_workbook(file_path)</span><br><span class="line"> sheet = book.sheet_by_index(<span class="number">0</span>)</span><br><span class="line"> head = dict()</span><br><span class="line"> <span class="keyword">for</span> i, v <span class="keyword">in</span> enumerate(sheet.row(<span class="number">0</span>)):</span><br><span class="line"> head[i] = v.value</span><br><span class="line"> info_list = []</span><br><span class="line"> <span class="keyword">for</span> row_num <span class="keyword">in</span> range(sheet.nrows):</span><br><span class="line"> d = dict()</span><br><span class="line"> <span class="keyword">for</span> col_num <span class="keyword">in</span> range(sheet.ncols):</span><br><span class="line"> <span class="keyword">if</span> row_num == <span class="number">0</span>:</span><br><span class="line"> <span class="keyword">continue</span></span><br><span class="line"> <span class="keyword">if</span> <span class="string">'empty:'</span> <span class="keyword">in</span> sheet.cell(row_num, col_num).__str__():</span><br><span class="line"> <span class="keyword">if</span> col_num <span class="keyword">in</span> img_col_index:</span><br><span class="line"> d[head[col_num]] = img_info_dict.get((row_num, col_num))</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> d[head[col_num]] = sheet.cell(row_num, col_num).value</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> d[head[col_num]] = sheet.cell(row_num, col_num).value</span><br><span class="line"> <span class="keyword">if</span> d:</span><br><span class="line"> info_list.append(d)</span><br><span class="line"> <span class="keyword">return</span> info_list</span><br></pre></td></tr></table></figure>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> re</span><br><span class="line"><span class="keyword">import</span> xml.dom.minidom <span class="keyword">as</span> xmldom</span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> zipfile</span><br><span class="line"><span class="keyword">import</span> shutil</span><br><span class="line"><span class="keyword">import</span> xlrd</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> path = <span class="string">r'E:\\员工信息.xlsx'</span></span><br><span class="line"> data = read_excel_info(path, img_col_index=[<span class="number">4</span>])</span><br><span class="line"> print(data)</span><br></pre></td></tr></table></figure>
<p>完整代码:<a href="https://github.com/dddreams/read-excel-image/blob/master/read_users.py" target="_blank" rel="noopener">https://github.com/dddreams/read-excel-image/blob/master/read_users.py</a></p>
<h2 id="4、处理图片对应不到的问题"><a href="#4、处理图片对应不到的问题" class="headerlink" title="4、处理图片对应不到的问题"></a>4、处理图片对应不到的问题</h2><p> 有时会出现图片对应不到记录的情况,这是因为 Excel 中图片不在单独的单元格内,指定的列中取不到图片,这就需要调整 Excel 内的数据了,但是如果数据量比较大,调整起来就比较麻烦了。其实,我们可以借助 Excel 宏的功能,批量修改图片大小,批量让其居中,位于单元格内部,这样在解析 xml 时就能对应到每条记录了。</p>
<p>打开 Excel 按下 <code>Alt + F11</code> ,然后点击【插入】菜单,选择【模块】复制下面代码:</p>
<figure class="highlight vbscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">Sub</span> dq()</span><br><span class="line"><span class="keyword">Dim</span> shp As Shape</span><br><span class="line"><span class="keyword">For</span> <span class="keyword">Each</span> shp <span class="keyword">In</span> ActiveSheet.Shapes</span><br><span class="line">shp.<span class="built_in">Left</span> = (shp.TopLeftCell.Width - shp.Width) / <span class="number">2</span> + shp.TopLeftCell.<span class="built_in">Left</span></span><br><span class="line">shp.Top = (shp.TopLeftCell.Height - shp.Height) / <span class="number">2</span> + shp.TopLeftCell.Top</span><br><span class="line"><span class="keyword">Next</span></span><br><span class="line"><span class="keyword">End</span> <span class="keyword">Sub</span></span><br></pre></td></tr></table></figure>
<p>然后返回 Excel 【开始】菜单中点击【查找和选择】选择【定位条件】中【对象】,将选中所有的图片,然后按下<code>Alt+F8</code> 点击【执行】就可以批量将图片在所在单元格居中了。如果图片大小过大,全部选中后更改图片大小即可。然后解析 Xml 文件就不会出现图片与记录对应不到的情况了。</p>
<p><div style="text-align:center;margin:0;" markdown="1"><img src="../img/ddAnswer.jpg" style="margin:0 auto;"></div></p>
<p style="text-align: center;margin:0;">更多文章请关注微信公众号: 治恒说说</p></div><div class="tags"><a href="/tags/Python/"><i class="fa fa-tag"></i>Python</a><a href="/tags/Excel/"><i class="fa fa-tag"></i>Excel</a></div><div class="post-nav"><a class="pre" href="/211120-github精选-PeaZip一款好用又免费的压缩软件.html">github精选-PeaZip一款好用又免费的压缩软件</a><a class="next" href="/211111-SpringRestTemplate的使用.html">Spring RestTemplate的使用</a></div></div></div></div><div class="pure-u-1-4 hidden_mid_and_down"><div id="sidebar"><div class="widget"><div class="search-form"><input id="local-search-input" placeholder="Search" type="text" name="q" results="0"><div id="local-search-result"></div></div></div><div class="widget"><div class="widget-title"><i class="fa fa-wechat"> 微信公众号</i></div><div class="tagcloud"><img src="/img/zhihengss.jpg" style="width: 80%"></div></div><div class="widget"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/Github/">Github</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Mysql/">Mysql</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Python/">Python</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Spring-Boot/">Spring Boot</a><span class="category-list-count">6</span></li></ul></div><div class="widget"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/杂谈/" style="font-size: 15px;">杂谈</a> <a href="/tags/Kotlin/" style="font-size: 15px;">Kotlin</a> <a href="/tags/Google/" style="font-size: 15px;">Google</a> <a href="/tags/微信/" style="font-size: 15px;">微信</a> <a href="/tags/Photo/" style="font-size: 15px;">Photo</a> <a href="/tags/旅行/" style="font-size: 15px;">旅行</a> <a href="/tags/go/" style="font-size: 15px;">go</a> <a href="/tags/总结/" style="font-size: 15px;">总结</a> <a href="/tags/推荐/" style="font-size: 15px;">推荐</a> <a href="/tags/Spring-Boot/" style="font-size: 15px;">Spring Boot</a> <a href="/tags/Java/" style="font-size: 15px;">Java</a> <a href="/tags/运维/" style="font-size: 15px;">运维</a> <a href="/tags/Mysql/" style="font-size: 15px;">Mysql</a> <a href="/tags/Github/" style="font-size: 15px;">Github</a> <a href="/tags/教程/" style="font-size: 15px;">教程</a> <a href="/tags/软件/" style="font-size: 15px;">软件</a> <a href="/tags/Python/" style="font-size: 15px;">Python</a> <a href="/tags/Excel/" style="font-size: 15px;">Excel</a> <a href="/tags/工具/" style="font-size: 15px;">工具</a> <a href="/tags/JavaScript/" style="font-size: 15px;">JavaScript</a> <a href="/tags/Test/" style="font-size: 15px;">Test</a> <a href="/tags/Chrome/" style="font-size: 15px;">Chrome</a> <a href="/tags/Css/" style="font-size: 15px;">Css</a> <a href="/tags/Html/" style="font-size: 15px;">Html</a> <a href="/tags/设计模式/" style="font-size: 15px;">设计模式</a> <a href="/tags/Web/" style="font-size: 15px;">Web</a> <a href="/tags/React-Native/" style="font-size: 15px;">React-Native</a> <a href="/tags/ES6/" style="font-size: 15px;">ES6</a></div></div><div class="widget"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/211206-github精选-github加速访问神器.html">github精选-github加速访问神器</a></li><li class="post-list-item"><a class="post-list-link" href="/211204-github精选-一款高颜值的Redis客户端.html">github精选-一款高颜值的Redis客户端</a></li><li class="post-list-item"><a class="post-list-link" href="/211203-Python读取Excel中的图片(二).html">Python读取Excel中的图片(二)</a></li><li class="post-list-item"><a class="post-list-link" href="/211124-github精选-Linux命令大全.html">github精选-Linux命令大全</a></li><li class="post-list-item"><a class="post-list-link" href="/211120-github精选-PeaZip一款好用又免费的压缩软件.html">github精选-PeaZip一款好用又免费的压缩软件</a></li><li class="post-list-item"><a class="post-list-link" href="/211116-使用Python读取Excel中的图片并对应到记录.html">使用Python读取Excel中的图片并对应到记录</a></li><li class="post-list-item"><a class="post-list-link" href="/211111-SpringRestTemplate的使用.html">Spring RestTemplate的使用</a></li><li class="post-list-item"><a class="post-list-link" href="/211108-github精选-秒杀系统设计与实现.html">github精选-秒杀系统设计与实现</a></li><li class="post-list-item"><a class="post-list-link" href="/210208-Mysql登录失败多次锁定配置.html">Mysql登录失败多次锁定配置</a></li><li class="post-list-item"><a class="post-list-link" href="/210206-SpringBoot-使用JdbcTemplate操作数据库.html">SpringBoot-使用JdbcTemplate操作数据库</a></li></ul></div><div class="widget"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://geektutu.com/" title="极客兔兔" target="_blank">极客兔兔</a><ul></ul><a href="https://www.itmuch.com/" title="周立的博客" target="_blank">周立的博客</a><ul></ul><a href="https://liwenzhou.com/" title="李文周的博客" target="_blank">李文周的博客</a><ul></ul><a href="https://github.com/dddreams/dddreams.github.io/issues" title="添加友链请提交Issues" target="_blank">添加友链请提交Issues</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer">Copyright © 2021 <a href="/." rel="nofollow">zhiheng's blog.</a> Powered by<a rel="nofollow" target="_blank" href="https://hexo.io"> Hexo.</a><a rel="nofollow" target="_blank" href="https://github.com/tufu9441/maupassant-hexo"> Theme</a> by<a rel="nofollow" target="_blank" href="https://github.com/pagecho"> Cho.</a></div></div></div><a class="show" id="rocket" href="#top"></a><script type="text/javascript" src="/js/totop.js?v=1.0.0" async></script><script type="text/javascript" src="//cdn.jsdelivr.net/gh/fancyapps/fancybox/dist/jquery.fancybox.min.js" async></script><script type="text/javascript" src="/js/fancybox.js?v=1.0.0" async></script><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/gh/fancyapps/fancybox/dist/jquery.fancybox.min.css"><link rel="stylesheet" type="text/css" href="/css/search.css?v=1.0.0"><script type="text/javascript" src="/js/search.js?v=1.0.0"></script><script>var search_path = 'search.xml';
if (search_path.length == 0) {
search_path = 'search.xml';
}
var path = '/' + search_path;
searchFunc(path, 'local-search-input', 'local-search-result');
</script><script type="text/javascript" src="/js/copycode.js" successtext="复制成功!"></script><link rel="stylesheet" type="text/css" href="/css/copycode.css"><script type="text/javascript" src="/js/codeblock-resizer.js?v=1.0.0"></script><script type="text/javascript" src="/js/smartresize.js?v=1.0.0"></script></div></body></html>