python入門篇6:文本/CSV/Excel/word文件操作

 

2、CSV文件操作

2.1、從csv中讀取文件

import csv

def read_csv_index():
    """通過下標的方式"""
    with open('stock.csv', 'r') as f:
        # csv.reader()返回的是一個迭代器,這裏的迭代器是列表
        reader = csv.reader(f)
        # 一般不想使用標題行使用next(reader)
        next(reader)  # 表示第一行開始,不是從第0行開始
        for x in reader:
            name = x[3]
            volumn = x[-1]
            print(name, volumn)

def read_csv_dict():
    """通過字典的方式讀取csv文件"""
    with open("stock.csv","r") as f:
        # csv.DictReader()返回的是一個迭代器,這裏的迭代器是字典
        # DictReader()不會包含標題行的數據
        reader = csv.DictReader(f)
        for d in reader:
            name = d['secShortName']
            volumn = d['turnoverVol']
            print(name, volumn)

if __name__ == '__main__':
    read_csv_dict()

【例子】

import csv
with open("a.csv","r") as f:
    # 文件中的第一行會自動作爲標題行處理,並且會根據他們得出字典中鍵的名稱
    reader = csv.DictReader(f)
    for line in reader: # OrderedDict([('url', 'http://www.baiodu.com'), ('name', 'baidu'), ('content', 'baidu.com')])
        print(line.pop('url'),line.pop('name'),line.pop('content'))

 

2.2、寫入csv文件中

import csv

def write_csv():
    # 第一行的標題
    csv_headers = ['name', 'age', 'classroom']
    values = [ ('zhangsan', 19, '508'),
        ('zhaosi', 20, '902'),
        ('wangwu', 32, '603')]
   # newline參數默認值是newline='\n'
    with open("test.csv",'w',encoding='utf-8',newline='') as f:
        writer = csv.writer(f)
        # 寫入文件標題
        writer.writerow(csv_headers)
        # writerows()一次寫入多行數據
        writer.writerows(values)
def write_csv_dict():
    """使用字典的方式把數據寫入csv文件中"""
    csv_headers=['name','age','room']
    # 列表中存放的是字典
    values = [
        {'name':'zhangsan','age':19,'room':'508'},
        {'name':'zhaosi','age':20,'room':'902'},
        {'name':'wangwu','age': 32,'room':'603'}
              ]

    with open("test.csv", 'w', encoding='utf-8',newline='') as f:
        writer= csv.DictWriter(f,csv_headers)
        # 寫入文件標題
        writer.writeheader()
        # writerows()一次寫入多行數據
        writer.writerows(values)

if __name__ == '__main__':
    write_csv_dict()

2.3、不使用csv模塊追加寫入文件

 def save_data(self,content,code):
        with open("面上項目.csv","a+",encoding="utf-8") as f:
            for i in content:
                csv_list = []
                csv_list.append(code) # 申請代碼
                csv_list.append(i[1]) # 項目名稱
                csv_list.append(i[3]) # 項目類別
                csv_list.append(i[4]) # 依託單位
                csv_list.append(i[5])  # 負責人
                csv_list.append(i[7])  # 年份
                f.write(','.join(csv_list))
                f.write("\n")
            print("完成",code,"申請編號")
        pass

3、openpyxl操作excel

3.1、創建excel文檔

import openpyxl
data = openpyxl.Workbook() # 新建工作簿
data.create_sheet('Sheet1') # 添加工作簿
#table = data.get_sheet_by_name('Sheet1') # 獲得指定名稱頁
table = data.active # 獲得當前活躍的工作頁,默認爲第一個工作頁
table.cell(1,1,'url') # 行,列,值 這裏是從1開始計數的
table.cell(1,2,'名稱')
table.cell(1,3,'時間')
table.cell(1,4,'標籤')
table.cell(1,5,'內容')
data.save('test.xlsx') # 一定要保存

3.2、追加寫入excel文檔中

import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
# print(data.get_named_ranges()) # 輸出工作頁索引範圍
# print(data.get_sheet_names()) # 輸出所有工作頁的名稱
# 取第一張表
sheetnames = wb.sheetnames #wb.sheetnames獲取所有表格的名稱
table = wb[sheetnames[0]] # wb['工作簿名稱']表示通過表格名稱獲取Worksheet對象
table = wb.active # 獲取活躍的表格
# wb.remove(worksheet) or del wb[sheetname]刪除一個表格
# print(table.title) # 輸出表名
nrows = table.max_row # 獲得行數
ncolumns = table.max_column # 獲得行數
values = [
    {'url':'http://www.bidchance.com/info-zhongbiao-26052140.html','name':'Guangan20190717101142001','date':'2019年07月17日','tag':'空調招標 街招標','content':'項目信息'},
{'url':'http://www.bidchance.com/info-zhongbiao-26052141.html','name':'Guangan20190717101142002','date':'2019年07月18日','tag':'空調招標 街招標2','content':'項目信息2'},
{'url':'http://www.bidchance.com/info-zhongbiao-26052142.html','name':'Guangan20190717101142003','date':'2019年07月19日','tag':'空調招標 街招標3','content':'項目信息3'},
{'url':'http://www.bidchance.com/info-zhongbiao-26052143.html','name':'Guangan20190717101142004','date':'2019年07月20日','tag':'空調招標 街招標4','content':'項目信息4'},
{'url':'http://www.bidchance.com/info-zhongbiao-26052144.html','name':'Guangan20190717101142005','date':'2019年07月21日','tag':'空調招標 街招標5','content':'項目信息5'},



    ]
for value in values:
    table.cell(nrows+1,1).value = value['url']
    table.cell(nrows + 1, 2).value = value['name']
    table.cell(nrows + 1, 3).value = value['date']
    table.cell(nrows+1,4).value = value['tag']
    table.cell(nrows + 1, 5).value = value['content']
    nrows = nrows + 1
wb.save('test.xlsx')

4、word操作

首先我們需要安裝python-docx,也就是pip install python-docx。學習可以參考https://www.jianshu.com/p/30b49d0322a9這個頁面。

# coding:utf-8
# pip install python-docx
from docx import Document
from docx.shared import Inches
document = Document() # #創建一個文檔
document.add_heading(u'Python 操作Word實例示例', level=1) #直接添加標題,參數level表示幾級標題,越小越大
#先定義標題,再添加內容
p_total = document.add_heading()
r_total = p_total.add_run("這是一個table表格")
r_total.font.bold = True # bold表示加粗,italic表示斜體
# 增加表格
# table = document.add_table(rows=1, cols=3)
table = document.add_table(rows=1, cols=3, style="Light List Accent 5") # style表示表格邊框顏色
# 設置表格表頭
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'testName'
hdr_cells[1].text = 'param'
hdr_cells[2].text = 'exc'

for i in range(3):
    i = i + 1
    testName = "testName"+str(i)
    param = "param"+str(i)
    exc="exc"+str(i)
    row_cells = table.add_row().cells
    row_cells[0].text = testName
    row_cells[1].text = param
    row_cells[2].text = exc

#添加二級標題
p_total = document.add_heading("", level=2)
r_total = p_total.add_run("這是一個二級標題")
r_total.font.bold = True # 加粗
r_total.italic = True # 斜體
img_name = "D:/test.jpg"
# width=Inches(0.5) 中的Inches表示多少英寸
document.add_picture(img_name, width=Inches(5))  # 向文檔裏添加圖片
# document.add_picture(img_name)

paragraph = document.add_paragraph('啊,這是一個例子')#添加一個段落
# run = paragraph.add_run('bold')
# run.bold = True # bold字體加粗
# run.italic = True # bold字斜體
# prior_paragraph = paragraph.insert_paragraph_before('啊,這')#在某處插入一個段落

document.save("D:/test.docx")  # 保存文檔

【效果】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章