csv与openpyxl函数

Posted leiting7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csv与openpyxl函数相关的知识,希望对你有一定的参考价值。

csv与openpyxl函数

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模块。

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

技术图片

以上是关于csv与openpyxl函数的主要内容,如果未能解决你的问题,请参考以下文章

openpyxl将数字格式设置为单元格但不起作用

Python 中 openpyxl 模块封装,读写 Excel 文件中自动化测试用例数据

有人可以解释以下 R 代码片段吗? [关闭]

如何使用openpyxl删除excel中的第一行

python 使用openpyxl来写数据到excel表格

python openpyxl 2.5.4 版本 excel常用操作封装