今天开始往后都,用python3来写脚本
1.csv数据处理
csv文件格式:
逗号分隔符(csv),有时也称为字符分隔值,因为分隔字符也可以不是逗号,其文件以纯文本的形式存储表格数据(数字和文本)。
纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。
csv文件由任意数目的记录组成,记录间以某种换行符分割;每条记录由字段组成,字段间的分隔符是其他字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
csv数据,如以下格式:
27,20,14,15,14,12,94,64,37,1015,1013,1009,7,5,2,21,8,35,0.00,152
另外,csv文件可以直接用excel或者类似软件打开,样子都是我们常见的表格形式。
平常我们取文件内的数据存入列表一般用以下方法:
<code>import</code> <code>codecs</code>
<code>lineText </code><code>=</code> <code>list</code><code>()</code>
<code>with codecs.</code><code>open</code><code>(</code><code>"sl_original_live.csv"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>) as f:</code>
<code> </code><code>for</code> <code>line </code><code>in</code> <code>f.readlines():</code>
<code> </code><code>print</code> <code>(line.split(</code><code>","</code><code>)) </code><code>#以列表形式,打印每一行的数据。</code>
<code> </code><code>lineText.append(line.split(</code><code>","</code><code>))</code>
<code> </code><code>print</code> <code>(lineText) </code><code>#把上面所有行作为元素数据,存入一个列表中。</code>
csv模块用法,使用模块来处理数据:
<code>import</code> <code>csv</code>
<code>fileName </code><code>=</code> <code>"sl_original_live.csv"</code>
<code>with codecs.</code><code>open</code><code>(fileName) as fcsv:</code>
<code> </code><code>linecsv </code><code>=</code> <code>csv.reader(fcsv)</code>
<code> </code><code>rows </code><code>=</code> <code>[row </code><code>for</code> <code>row </code><code>in</code> <code>linecsv]</code>
<code> </code><code>print</code> <code>(rows)</code>
以上了解即可。
2.excel数据处理
python 提供有第三方库来支持excel的操作,python处理excel文件用的第三方模块库,有xlrd、xlwt、xluntils和pyExcelerator,
除此之外,python处理excel还可以用win32com和openpyxl模块.
我们主要用xlrd、xlwt、xluntils这三个模块,pyExcelerator模块偶尔也会用:
<code>pip install xlrd</code>
<code>pip install xlwt</code>
<code>pip install xlutils</code>
<code>pip install pyExcelerator</code>
xlrd 只能进行读取excel文件,没法进行写入文件;
xlwt 可以写入文件,但是不能在已有的excel的文件上进行修改;
xluntils 可以在已有的excel文件上进行修改;
pyExcelerator 与xlwt类似,也可以用来生成excel文件
读取表单数据:
举例:按行取数据
<code>import</code> <code>xlrd</code>
<code>def</code> <code>readExcel():</code>
<code> </code><code>data </code><code>=</code> <code>xlrd.open_workbook(</code><code>'test.xlsx'</code><code>)</code>
<code> </code><code>table </code><code>=</code> <code>data.sheets()[</code><code>0</code><code>] </code><code># 打开第一张表</code>
<code> </code><code>nrows </code><code>=</code> <code>table.nrows </code><code># 获取表的行数</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(nrows): </code><code># 循环逐行打印</code>
<code> </code><code>print</code><code>(table.row_values(i)) </code><code>#通过row_values来获取每行的值</code>
<code> </code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>
<code> </code><code>readExcel()</code>
举例:按竖列取数据
<code>data </code><code>=</code> <code>xlrd.open_workbook(</code><code>"whsc.xlsx"</code><code>)</code>
<code>table2 </code><code>=</code> <code>data.sheet_by_name(</code><code>"域名"</code><code>) </code><code>#sheet标签页的名称</code>
<code>for</code> <code>col </code><code>in</code> <code>range</code><code>(table2.ncols):</code>
<code> </code><code>print</code> <code>(table2.col_values(col))</code>
举例:创建新的并写入excel文件(xlwt无法修改原有文件)
<code>import</code> <code>xlwt</code>
<code>excel </code><code>=</code> <code>xlwt.Workbook()</code>
<code>#创建3个表</code>
<code>sheet1 </code><code>=</code> <code>excel.add_sheet(</code><code>"sheet1"</code><code>)</code>
<code>sheet2 </code><code>=</code> <code>excel.add_sheet(</code><code>"sheet2"</code><code>)</code>
<code>sheet3 </code><code>=</code> <code>excel.add_sheet(</code><code>"sheet3"</code><code>)</code>
<code>#只在第一个表sheet1里写数据,如下:</code>
<code>sheet1.write(</code><code>0</code><code>,</code><code>0</code><code>,</code><code>"hello world1"</code><code>, cell_overwrite_ok</code><code>=</code><code>True</code><code>)</code>
<code>sheet1.write(</code><code>1</code><code>,</code><code>0</code><code>,</code><code>"hello world2"</code><code>, cell_overwrite_ok</code><code>=</code><code>True</code><code>)</code>
<code>sheet1.write(</code><code>2</code><code>,</code><code>0</code><code>,</code><code>"hello world3"</code><code>, cell_overwrite_ok</code><code>=</code><code>True</code><code>)</code>
<code>#第一个是行,第二个是列,第三个是内容,第二个参数用来确认同一个cell单元是否可以重设值。</code>
<code>excel.save(</code><code>"hello.xlsx"</code><code>)</code>
<code>print</code><code>(</code><code>"创建hello.xlsx完成"</code><code>)</code>
效果如下:
举例:字体效果
使用样式,字体类型、加粗等效果:
<code>#初始化样式</code>
<code>style </code><code>=</code> <code>xlwt.XFStyle()</code>
<code>#为样式创建字体</code>
<code>font </code><code>=</code> <code>xlwt.Font()</code>
<code>font.name </code><code>=</code> <code>'Times New Roman'</code> <code>#指定字体名称</code>
<code>font.bold </code><code>=</code> <code>True</code> <code>#是否加粗</code>
<code>#设置样式的字体</code>
<code>style.font </code><code>=</code> <code>font</code>
<code>#使用样式</code>
<code>sheet3.write(</code><code>0</code><code>,</code><code>1</code><code>,</code><code>'some bold Times text'</code><code>,style)</code>
<code>#保存该excel文件,有同名文件时直接覆盖</code>
<code>excel.save(</code><code>'hello.xlsx'</code><code>)</code>
<code>print</code><code>(</code><code>'创建hello.xlsx文件完成!'</code><code>)</code>
举例:处理超链接
<code>book </code><code>=</code> <code>xlwt.Workbook()</code>
<code>sheet_index </code><code>=</code> <code>book.add_sheet(</code><code>'index'</code><code>)</code>
<code>line</code><code>=</code><code>0</code>
<code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>9</code><code>):</code>
<code> </code><code>link </code><code>=</code> <code>'HYPERLINK("{0}.txt", "{1}_11111")'</code><code>.</code><code>format</code><code>(i, i)</code>
<code> </code><code>#{0}.txt是要链接的文件,{1}_11111是链接文件的内容</code>
<code> </code><code>sheet_index.write(i, </code><code>0</code><code>, xlwt.Formula(link))</code>
<code> </code><code>#第一个行号,第二个列号,第三个是写入内容link,内容里面超链接</code>
<code>book.save(</code><code>'simple2.xlsx'</code><code>)</code>
<code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>, </code><code>9</code><code>):</code>
<code> </code><code>file</code> <code>=</code> <code>str</code><code>(i) </code><code>+</code> <code>".txt"</code>
<code> </code><code>with codecs.</code><code>open</code><code>(</code><code>file</code><code>, </code><code>'w'</code><code>) as f:</code>
<code> </code><code>f.write(</code><code>str</code><code>(i)</code><code>*</code><code>10</code><code>)</code>
3.HTML文件转化成PDF文件
转换成pdf的三种方法:
在工作中,会遇到把html文件转换成pdf文件
python给我们提供了pdfkit这个模块,直接安装使用就可以了
下面就下来介绍一个pdfkit模块的几种用法
首先,我们安装该模块:
<code>pip </code><code>install</code> <code>pdfkit</code>
1.网页转换成pdf(直接把url转换成pdf文件)
<code>import</code> <code>pdfkit</code>
<code>pdfkit.from_url(</code><code>'http://google.com'</code><code>, </code><code>'out1.pdf'</code><code>)</code>
2. Html转换成pdf
<code>pdfkit.from_file(</code><code>'test.html'</code><code>, </code><code>'out2.pdf'</code><code>)</code>
3. 字符串转换成pdf
<code>pdfkit.from_string(</code><code>'Hello lingxiangxiang!'</code><code>, </code><code>'out3.pdf'</code><code>)</code>
三种方法简单例子:
<code>pdfkit.from_file(</code><code>"hello.html"</code><code>, </code><code>1.pdf</code><code>)</code>
<code>pdfkit.from_url(</code><code>"www.baidu.com"</code><code>, </code><code>2.pdf</code><code>)</code>
<code>pdfkit.from_string(</code><code>"hello world"</code><code>, </code><code>3.pdf</code><code>)</code>
即可生成pdf文件~
举例:
抓取aming的linux教程,然后制作成pdf文件
先抓取每个的网页,然后生成pdf文件
(1)查看网页源代码
(2)查看源代码内容
和url对应规律
http://www.apelearn.com/study_v2/chapter2.html
http://www.apelearn.com/study_v2/chapter5.html
http://www.apelearn.com/study_v2/chapter7.html
... ...
代码如下(未封装,回头有空封装一下):
<code>import</code> <code>os</code>
<code>import</code> <code>re</code>
<code>import</code> <code>requests</code>
<code>if</code> <code>not</code> <code>os.path.exists(</code><code>"aminglinux"</code><code>):</code>
<code> </code><code>os.mkdir(</code><code>"aminglinux"</code><code>)</code>
<code>os.chdir(</code><code>"aminglinux"</code><code>)</code>
<code>url </code><code>=</code> <code>"http://www.apelearn.com/study_v2/"</code>
<code>s </code><code>=</code> <code>requests.session()</code>
<code>text </code><code>=</code> <code>s.get(url).text</code>
<code>reg </code><code>=</code> <code>re.</code><code>compile</code><code>(r</code><code>'<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"(.*)\">.*<\/a><\/li>'</code><code>)</code>
<code>result </code><code>=</code> <code>reg.findall(text)</code>
<code>res </code><code>=</code> <code>list</code><code>(</code><code>set</code><code>(result))</code>
<code>for</code> <code>i </code><code>in</code> <code>res:</code>
<code> </code><code>purl </code><code>=</code> <code>"{0}{1}"</code><code>.</code><code>format</code><code>(url, i)</code>
<code> </code><code>print</code> <code>(purl)</code>
<code> </code><code>pdfFileName </code><code>=</code> <code>i.replace(</code><code>"html"</code><code>, </code><code>"pdf"</code><code>)</code>
<code> </code><code>print</code> <code>(pdfFileName)</code>
<code> </code><code>config </code><code>=</code> <code>pdfkit.configuration(wkhtmltopdf</code><code>=</code><code>r</code><code>"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe"</code><code>)</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>pdfkit.from_url(purl, pdfFileName, configuration</code><code>=</code><code>config)</code>
<code> </code><code>except</code><code>:</code>
<code> </code><code>continue</code>
执行结果:
本文转自 听丶飞鸟说 51CTO博客,原文链接:http://blog.51cto.com/286577399/2062339