csv函数

常用的存储数据的方式有两种——存储成csv格式文件、存储成Excel文件(不是复制黏贴的那种)

前面,我有讲到json是特殊的字符串。其实,csv也是一种字符串文件的格式,它组织数据的语法就是在字符串之间加分隔符——行与行之间是加换行符,同列之间是加逗号分隔。

为什么要加分隔符?因为不加的话,数据都堆在一起,会显得杂乱无章,也不方便我们之后提取和查找。这也是一种让数据变得有规律的组织方式。

它可以用任意的文本编辑器打开(如记事本),也可以用Excel打开,还可以通过Excel把文件另存为csv格式(因为Excel支持csv格式文件)。

另外,用csv格式存储数据,读写比较方便,易于实现,文件也会比Excel文件小。但csv文件缺少Excel文件本身的很多功能,比如不能嵌入图像和图表,不能生成公式。

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()函数里,需要放入列表参数,所以我们得把要写入的内容写成列表。就像['电影','豆瓣评分']。

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()
#写入完成后,关闭文件就大功告成啦

存储成csv格式文件和存储成Excel文件,这两种不同的存储方式需要引用的模块也是不同的。操作csv文件我们需要借助csv模块;


openpyxl 函数

操作Excel文件则需要借助 openpyxl 模块。

安装

pip install openpyxl

导入

from openpyxl import Workbook   # 创建时导入
from openpyxl import load_workbook  # 读取本地表格是导入

字典写入Excel

l = {
'name':'吕布',
'age':18
}
from openpyxl import Workbook
wb = Workbook()
sheet = wb.active
sheet.title = '王者荣耀'
sheet['A1'] = '英雄'
sheet['B1'] = '价格'

n = 1
for k,v in l.items():
sheet[f'A{n}'] = k
sheet[f'B{n}'] = v
n += 1
wb.save('王者荣耀.xlsx')

创建表

# 方式一:插入到最后(default)
>>> ws1 = wb.create_sheet("Mysheet") 
# 方式二:插入到最开始的位置
>>> ws2 = wb.create_sheet("Mysheet", 0)

查看所有的sheet名

print(wb.sheetnames)
#['王者荣耀', '德玛西亚']
#读取单个单元格内容
from openpyxl import load_workbook
wb = load_workbook('王者荣耀.xlsx')
sheet = wb['德玛西亚']
print(sheet['A2'].value)
#读取一列内容
wb = load_workbook('王者荣耀.xlsx')
sheet = wb['德玛西亚']
line = sheet['A']
for i in range(len(line)):
    print(line[i].value)


创建表格插入数据

    def save_excel(self):
        wb = Workbook()
        ws = wb.active
        ws = wb.create_sheet('weibo')  # 创建 sheet
        ws.append(['kio_name', 'img_price', 'video_price'])
        self.crawl() 
        count = 1
        for kol in self.kol_quotation_list:

            name = list(kol.keys())[0]
            img_price = list(kol.values())[0][0]
            video_price =  list(kol.values())[0][1]
            print(name, img_price, video_price)
            count += 1
            ws[f'A{count}'] = name
            ws[f'B{count}'] = img_price
            ws[f'C{count}'] = video_price

        wb.save('kol_quotation.xlsx')

打开表格插入数据


from openpyxl import load_workbook

class Weibo_filter:

    def crawl(self):
        workbook = load_workbook('weibo_Filter.xlsx')
        wb = workbook['工作表1']
        line_num = 2
        for i in range(100):
            line_num += 1
            loca_name = wb[f'A{line_num}'].value
            loca_link = wb[f'B{line_num}'].value

            print(line_num, loca_name, loca_link)


run = Weibo_filter()
run.crawl()

from openpyxl import load_workbook

    # 打开一个表格把数据插入另一个表格
    def save_excel(self):
        self.crawl()
		
        # 打开表格
        workbook = load_workbook('platform-kols-WeiBo.xlsx')
        # 选择sheet
        wb = workbook['Weibo我']

        s_workbook = load_workbook('base.xlsx')
        wbb = s_workbook['Weibo']
        line_name = wb['A3:A34648']
        line_num = 2
        no_black_line = 2
        for i in line_name:
            for j in i:
                line_num += 1
                skyspread_kol_name = j.value
                id = wb[f'B{line_num}'].value
                fans = wb[f'D{line_num}'].value
                tweet = wb[f'E{line_num}'].value
                retweet = wb[f'F{line_num}'].value
                quest_retweet = wb[f'G{line_num}'].value
                quest_tweet = wb[f'H{line_num}'].value

                for kol in self.kol_quotation_list:
                    weiboyi_name = list(kol.keys())[0]
                    weiboyi_img_price = list(kol.values())[0][0]
                    vweiboyi_ideo_price =  list(kol.values())[0][1]

                    if weiboyi_name == skyspread_kol_name:
                        no_black_line += 1
                        print(f'add success {weiboyi_name}')
                        wbb[f'A{no_black_line}'] = skyspread_kol_name
                        wbb[f'B{no_black_line}'] = id
                        wbb[f'E{no_black_line}'] = fans
                        wbb[f'F{no_black_line}'] = tweet
                        wbb[f'G{no_black_line}'] = retweet
                        wbb[f'H{no_black_line}'] = quest_retweet
                        wbb[f'I{no_black_line}'] = quest_tweet
                        wbb[f'J{no_black_line}'] = weiboyi_img_price
                        wbb[f'K{no_black_line}'] = vweiboyi_ideo_price

        s_workbook.save('new_platform-kols-WeiBo.xlsx')

QQ音乐邓紫棋歌曲评论爬取数据存储示例

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')


打开插入

import os
from openpyxl import load_workbook, Workbook


class Weibo_filter:

    def open_local_excel(self):
        '''
        打开本地表格
        :return: 
        '''
        workbook = load_workbook('weibo_Filter.xlsx')
        wb = workbook['工作表1']
        line_num = 2
        for i in range(100):
            line_num += 1
            local_name = wb[f'A{line_num}'].value
            local_link = wb[f'B{line_num}'].value

            print(line_num, local_name, local_link)


    def create_new_excel(self):
        '''
        创建一个新表格
        :return: 
        '''
        other_one_excel_name = 'after_filter_weibo.xlsx'
        if not os.path.exists(other_one_excel_name):
            workbook = Workbook()
            wb = workbook.create_sheet('工作表1')
            wb['A1'] = 'KOL Account'
            wb['A2'] = 'Name'
            wb['B1'] = 'KOL Account'
            wb['B2'] = 'id'
            wb['C1'] = 'KOL Account'
            wb['C2'] = 'Labels'
            wb['D1'] = 'Indicators'
            wb['D2'] = 'Followers'
            # wb['E1:H1'] = 'Quotation'
            wb['E2'] = 'Tweet'
            wb['F2'] = 'Retweet'
            wb['G2'] = 'Quest Tetweet'
            wb['H2'] = 'Quest Tweet'
            wb['I1'] = 'Description'
            wb['I2'] = 'Description'
            workbook.save(other_one_excel_name)



run = Weibo_filter()
run.create_new_excel()

最大行最大列


row = self.personal_wb.max_row  # 最大行数
column = self.personal_wb.max_column  # 最大列数
now_time = time.strftime('%Y-%m-%d', time.localtime(int(time.time())))
spider_date = str(self.personal_wb.cell(1, column-1).value).split(' ')[0]  # 按照二维方式插入表格

Sheet 操作


删除 Sheet
workbook = load_workbook('templatee.xlsx')
ws1 = workbook['Sheet1']
workbook.remove(ws1)

增加 Sheet

workbook.create_sheet(sheet_name)

获取所有 Sheet

wb.sheetnames

 posted on 2019-10-31 12:24  Rannie`  阅读(2829)  评论(0编辑  收藏  举报
去除动画
找回动画