csv與openpyxl函數

csv與openpyxl函數

csv函數

經常使用的存儲數據的方式有兩種——存儲成csv格式文件、存儲成Excel文件(不是複製黏貼的那種)html

前面,我有講到json是特殊的字符串。其實,csv也是一種字符串文件的格式,它組織數據的語法就是在字符串之間加分隔符——行與行之間是加換行符,同列之間是加逗號分隔。python

爲何要加分隔符?由於不加的話,數據都堆在一塊兒,會顯得雜亂無章,也不方便咱們以後提取和查找。這也是一種讓數據變得有規律的組織方式。json

它能夠用任意的文本編輯器打開(如記事本),也能夠用Excel打開,還能夠經過Excel把文件另存爲csv格式(由於Excel支持csv格式文件)。app

另外,用csv格式存儲數據,讀寫比較方便,易於實現,文件也會比Excel文件小。但csv文件缺乏Excel文件自己的不少功能,好比不能嵌入圖像和圖表,不能生成公式。dom

import csv
#引用csv模塊。
csv_file = open('demo.csv','w',newline='',encoding='utf-8')
#建立csv文件,咱們要先調用open()函數,傳入參數:文件名「demo.csv」、寫入模式「w」、newline=''、encoding='utf-8'。

加newline=' '參數的緣由是,能夠避免csv文件出現兩倍的行距(就是能避免表格的行與行之間出現空白行)。加encoding='utf-8',能夠避免編碼問題致使的報錯或亂碼。編輯器

建立完csv文件後,咱們要藉助csv.writer()函數來創建一個writer對象。函數

import csv
#引用csv模塊。
csv_file = open('demo.csv','w',newline='',encoding='utf-8')
#調用open()函數打開csv文件,傳入參數:文件名「demo.csv」、寫入模式「w」、newline=''、encoding='utf-8'。
writer = csv.writer(csv_file)
# 用csv.writer()函數建立一個writer對象。

那怎麼往csv文件裏寫入新的內容呢?答案是——調用writer對象的writerow()方法。編碼

writer.writerow(['電影','豆瓣評分'])
#藉助writerow()函數能夠在csv文件裏寫入一行文字 "電影"和「豆瓣評分」

提醒:writerow()函數裏,須要放入列表參數,因此咱們得把要寫入的內容寫成列表。就像['電影','豆瓣評分']。url

import csv
#引用csv模塊。
csv_file = open('demo.csv','w',newline='',encoding='utf-8')
#調用open()函數打開csv文件,傳入參數:文件名「demo.csv」、寫入模式「w」、newline=''、encoding='utf-8'。
writer = csv.writer(csv_file)
# 用csv.writer()函數建立一個writer對象。
writer.writerow(['電影','豆瓣評分'])
#調用writer對象的writerow()方法,能夠在csv文件裏寫入一行文字 「電影」和「豆瓣評分」。
writer.writerow(['銀河護衛隊','8.0'])
#在csv文件裏寫入一行文字 「銀河護衛隊」和「8.0」。
writer.writerow(['復仇者聯盟','8.1'])
#在csv文件裏寫入一行文字 「復仇者聯盟」和「8.1」。
csv_file.close()
#寫入完成後,關閉文件就大功告成啦

2019-10-30_19-49-59

存儲成csv格式文件和存儲成Excel文件,這兩種不一樣的存儲方式須要引用的模塊也是不一樣的。操做csv文件咱們須要藉助csv模塊;code

openpyxl函數

操做Excel文件則須要藉助openpyxl模塊。

一個Excel文檔也稱爲一個工做薄(workbook),每一個工做薄裏能夠有多個工做表(wordsheet),當前打開的工做表又叫活動表。

import openpyxl
#引用openpyxl 。
wb = openpyxl.Workbook()
#利用openpyxl.Workbook()函數建立新的workbook(工做薄)對象,就是建立新的空的Excel文件。

建立完新的工做薄後,還得獲取工做表。否則程序會懵逼,不知道要把內容寫入哪張工做表裏。

sheet = wb.active
#wb.active就是獲取這個工做薄的活動表,一般就是第一個工做表。
sheet.title = 'new title'
#能夠用.title給工做表重命名。如今第一個工做表的名稱就會由原來默認的「sheet1」改成"new title"。

添加完工做表,咱們就能來操做單元格,往單元格里寫入內容。

sheet['A1'] = '漫威宇宙' 
#把'漫威宇宙'賦值給第一個工做表的A1單元格,就是往A1的單元格中寫入了'漫威宇宙'。

往單元格里寫入內容只要定位到具體的單元格,如A1(根據Excel的座標,A1表明第一列第一行相交的單元格),而後給這個單元格賦值便可。

若是咱們想往工做表裏寫入一行內容的話,就得用到append函數。

row = ['美國隊長','鋼鐵俠','蜘蛛俠']
#把咱們想寫入的一行內容寫成列表,賦值給row。
sheet.append(row)
#用sheet.append()就能往表格裏添加這一行文字。

若是咱們想要一次性寫入的不止一行,而是多行內容

rows = [['美國隊長','鋼鐵俠','蜘蛛俠'],['是','漫威','宇宙', '經典','人物']]
#先把要寫入的多行內容寫成列表,再放進大列表裏,賦值給rows。
for i in rows:
    sheet.append(i)
#遍歷rows,同時把遍歷的內容添加到表格裏,這樣就實現了多行寫入。

成功寫入後,咱們千萬要記得保存這個Excel文件,否則就白寫啦!

wb.save('Marvel.xlsx')
#保存新建的Excel文件,並命名爲「Marvel.xlsx」
#寫入代碼
import openpyxl
wb = openpyxl.Workbook()
#利用openpyxl.Workbook()函數建立新的workbook(工做薄)對象,就是建立新的空的Excel文件。
sheet=wb.active
sheet.title='new title'
sheet['A1'] = '漫威宇宙'
rows= [['美國隊長','鋼鐵俠','蜘蛛俠'],['是','漫威','宇宙', '經典','人物']]
for i in rows:
    sheet.append(i)#列表
print(rows)
wb.save('鄧紫棋.xlsx')
#讀取的代碼:
wb = openpyxl.load_workbook('鄧紫棋.xlsx')
#調用openpyxl.load_workbook()函數,打開「Marvel.xlsx」文件。
sheet = wb['new title']
#獲取「Marvel.xlsx」工做薄中名爲「new title」的工做表。
sheetname = wb.sheetnames
print(sheetname)
#sheetnames是用來獲取工做薄全部工做表的名字的。若是你不知道工做薄到底有幾個工做表,就能夠把工做表的名字都打印出來。
cell = sheet['A1']
value = A1_cell.value
print(A1_value)
#把「new title」工做表中A1單元格賦值給cell,再利用單元格value屬性,就能打印出A1單元格的值。
#讀取一列內容
import openpyxl
wb = openpyxl.load_workbook('dzq.xlsx')
ws = wb.get_sheet_by_name('requests')
first_column = ws['A']
for i in range(len(first_column)):
    print(first_column[i].value)

鄧紫棋歌曲評論玩家

import requests,json
from bs4 import BeautifulSoup
import openpyxl

wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = 'requests'
sheet['A1'] = 'name'
sheet['B1'] = 'url1'


url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg'
header = {
    'Referer': 'https://y.qq.com/n/yqq/song/001X0PDf0W4lBq.html',

    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0'
    }
commentid = ''
for i in range(5):
    params = {
        'g_tk': '5381',
        'loginUin': '1394551891',
        'hostUin': '0',
        'format': 'json',
        'inCharset': 'utf8',
        'outCharset': 'GB2312',
        'notice': '0',
        'platform': 'yqq.json',
        'needNewCode': '0',
        'cid': '205360772',
        'reqtype': '2',
        'biztype': '1',
        'topid': '1530858',
        'cmd': '8',
        'needmusiccrit': '0',
        'pagenum': str(i),
        'pagesize': '25',
        'lasthotcommentid': commentid,
        'domain': 'qq.com',
        'ct': '24',
        'cv': '10101010',
    }


    res = requests.get(url=url,headers=header,params=params)
    json_comment = res.json()
    # print(json_comment)
    list_comment = json_comment['comment']['commentlist']
    for comment in list_comment:
        info = comment['rootcommentcontent']
        user = comment['rootcommentnick']
        sheet.append([info,user])

wb.save('dzq.xlsx')

2019-10-30_20-20-02

相關文章
相關標籤/搜索