今天開始往後都,用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