python中的文件读写操作

python中的文件读写操作

思维导图

在这里插入图片描述

Python读写CSV文件

csv文件是什么?

CSV(Comma Separated Values)全称逗号分隔值文件是一种简单、通用的文件格式,被广泛的应用于应用程序(数据库、电子表格等)数据的导入和导出以及异构系统之间的数据交换。

csv有什么特点

  1. 纯文本,使用某种字符集(如ASCIIUnicodeGB2312)等);
  2. 由一条条的记录组成(典型的是每行一条记录);
  3. 每条记录被分隔符(如逗号、分号、制表符等)分隔为字段(列);
  4. 每条记录都有同样的字段序列。

将数据写入CSV文件

  1. 使用Python标准库中的scv模块。
  2. writer函数会返回一个csvwriter对象,通过该对象的writerow或writerows方法就可以将数据写入到CSV文件中。
# 导入csv模块
import csv
# 使用CSV内置模块进行csv文件的读写操作。
# 1.返回一个文件对象
# Windows或者linux操作系统,写CSV文件必须加newline=''
# newline = ''   -> 将换行转为空
f1 = open('./店铺信息.csv', 'w', encoding='utf-8', newline='')
# 2.创建写方法对象
mywrite = csv.writer(f1)
# 3.写入列名:
# 单行写入:writerow()
col = ['店铺名', '人均', '口味', '环境', '服务']
mywrite.writerow(col)
# 4.写入对应信息
# 多行写入:writerows()
datas = [
    ['吼堂老火锅', 126, 4.5, 4.7, 4.6],
    ['小龙坎', 100, 4.8, '4.8', 4.7],
    ['巴蜀大宅门', '70', '4.8', '4.6', 4.8]
]
mywrite.writerows(datas)
f1.close()

读csv文件

要读取刚才创建的CSV文件,可以使用下面的代码,通过csv模块的reader函数可以创建出csvreader对象,该对象是一个迭代器,可以通过next函数或for-in循环读取到文件中的数据

# 导入csv模块
import csv
# CSV文件读操作
f2 = open('./店铺信息.csv', 'r', encoding='utf-8')
# 创建读方法
myreader = csv.reader(f2)
for i in myreader:
    # print(i)
    for j in i:
        print('{:<8}'.format(j), end='')
    print()

f2.close()

Python读写xlsx、xls文件

.xls:excel 2007以前的文件后缀名。最多容纳256列16000+行数据。 —> xlwt、xlrd

.xlsx:excel 2007开始文件使用的后缀名。最多容纳16000+列1048567行数据。
excel 2007开始兼容xls、xlsx后缀名。 —> openpyxl

Python读写xlsx文件

import openpyxl

# 1.新建一个excel文件
# 新建文件:openpyxl.Workbook()
file = openpyxl.Workbook()
# 如果文件存在:openpyxl.load_workbook(文件路径和文件名)

# 2.操作工作表
# 创建工作表对象:create_sheet(表名,下标)
#如果直接在工作簿最后追加工作表,下标参数不用写
file.create_sheet('学生成绩', 0)
file.create_sheet('学生成绩1')
# 查看工作簿中已经存在的工作表:sheetnames
print(file.sheetnames)
# 移除工作表:remove(表)  --> 表:工作簿对象[工作表]
file.remove(file['Sheet'])
#从学生成绩工作表插入信息
# cell(行 ,列) --》定位单元格
# value --》获取单元格内容
print(file['学生成绩'].cell(1,1).value)
file['学生成绩'].cell(1,1).value= '姓名'
print(file['学生成绩'].cell(1,1).value)
file['学生成绩'].cell(1,2).value= '性别'
# 方法二: 使用列号行号    定位单元格
file = ['学生成绩']
# 保存文件
file.save('./学生成绩.xlsx')

# 读xlsx文件

import openpyxl

file = openpyxl.load_workbook('./学生成绩.xlsx')
ws = file['学生成绩']
rows = ws.max_row
col = ws.max_column
for i in range(1, rows):
    for j in range(1, col + 1):
        print(ws.cell(i, j).value)


# 加载xlsx文件
file = openpyxl.load_workbook('./学生成绩.xlsx')
# 从工作簿中找工作表
ws = file['学生成绩']
# max_row:获取xlsx文件中最大行数
rows = ws.max_row
# max_column:获取xlsx文件中最大列数
col = ws.max_column
# 行
for i in range(1, rows + 1):
    # 列
    for j in range(1, col + 1):
        print(ws.cell(i, j).value)


Python读写xls文件

  1. 所需第三方库
    xlwt : xls文件写操作
    xlrd : xls文件读操作
  2. 代码演示,写操作。
import random

import  xlwt

# 创建文件
wb = xlwt.Workbook()
# 创建工作表 + 调用
sheet1 = wb.add_sheet('一年级一班成绩')
sheet2 = wb.add_sheet('一年级二班成绩')
sheet3 = wb.add_sheet('一年级三班成绩')

# 写入数据

names = ['张飞','刘备','关羽','曹操','貂蝉']
subject = ['姓名','语文','数学','英语']
for i in range(len(subject)):
    sheet1.write(0,i,subject[i])


for i in range(1,len(names)+1):
    sheet1.write(i,0,names[i-1])
    for j in range(1,4):
        #工作表.write (row,col ,content)
        sheet1.write(i,j,random.randint(0,100))
wb.save('一年级成绩表.xls')
  1. 读操作。
import xlrd

# 打开文件
wb = xlrd.open_workbook('一年级成绩表.xls')
# 选择工作表
# sheet_names() --> 查看存在的所有工作表
print(wb.sheet_names())
# sheet_by_index()
# sheet_by_name()
ws = wb.sheet_by_index(0)
print(ws.cell(0, 0).value)
ws1 = wb.sheet_by_name('一年级一班成绩')
print(ws1.cell(0, 0).value)

# 获取行列数
# nrows:获取最大行数
# ncols:获取最大列数
print(ws1.nrows, ws1.ncols)

练习

  1. 将所有csv文件中数据集合并为一个文件
import csv
resold_apartment= ['双流','大邑','崇州','彭州','成华','天府新区','天府新区南区','新津','新都','武侯','温江','简阳','蒲江','邛崃','郫都','都江堰','金堂','金牛','锦江','青白江','青羊','高新','高新西','龙泉驿']
f2 = open('./成都链家二手房数据/成都二手房信息.csv','w',encoding='utf-8',newline='')
mywrite = csv.writer(f2)
data1 = ['行政区', '标题', '小区', '街道', '户型', '面积', '装修', '单价', '总价']
mywrite.writerow(data1)
print(mywrite)
for i in resold_apartment:
    f1 = open(f'./成都链家二手房数据/成都{i}二手房信息.csv', 'r', encoding='utf-8')
    new_nuber = csv.reader(f1)
    data = list(new_nuber)
    # print(data)
    f1.close()
    for info in data[1:]:
        # print(info)
        mywrite.writerow(info)
f2.close()
  1. 随机生成一个有100人班级的语数外三科成绩的文件((使用csv或者xlsx均可)。2.初始文件包含四列:学号、语文、数学、英语。3.学生姓名使用学号python001、python002、…代替。3.学生姓名使用学号python001、python002、…代替。4.文件生成完毕以后计算每科最高分、最低分,并找出分值对应学生(允许一个分值有多个学生)5.新增—列:总分(每个学生的总分)6.找出排名第一的学生和倒数一名的学生。7.第四条和第六条找出的结果保存到列表中。
import openpyxl
import random

# 创建文件
wb = openpyxl.Workbook()
# 新建工作表
wb.create_sheet('学生成绩')
# 添加列
cols = ['姓名', '语文', '数学', '英语']
for i in range(len(cols)):
    wb['学生成绩'].cell(1, i + 1).value = cols[i]
# 写入学生学号数据
for i in range(1, 101):
    wb['学生成绩'].cell(i + 1, 1).value = 'python{:0>3}'.format(i)
# 生成成绩写入表格
for i in range(2, 102):
    for j in range(2, 5):
        wb['学生成绩'].cell(i, j).value = random.randint(0, 100)
# 保存文件
wb.save('学生成绩.xlsx')
# 加载源文件
wb = openpyxl.load_workbook('学生成绩.xlsx')
# 找工作表
# 对行号遍历
list1 = []
list2 = []
list3 = []
for i in range(2, 102):
    list1.append(wb['学生成绩'].cell(i, 2).value)
    list2.append(wb['学生成绩'].cell(i, 3).value)
    list3.append(wb['学生成绩'].cell(i, 4).value)

a = [wb['学生成绩'].cell(i, 1).value for i in range(2, 102) if wb['学生成绩'].cell(i, 2).value == max(list1)]
b = [wb['学生成绩'].cell(i, 1).value for i in range(2, 102) if wb['学生成绩'].cell(i, 2).value == min(list1)]
c = [wb['学生成绩'].cell(i, 1).value for i in range(2, 102) if wb['学生成绩'].cell(i, 3).value == max(list2)]
d = [wb['学生成绩'].cell(i, 1).value for i in range(2, 102) if wb['学生成绩'].cell(i, 3).value == min(list2)]
e = [wb['学生成绩'].cell(i, 1).value for i in range(2, 102) if wb['学生成绩'].cell(i, 4).value == max(list3)]
f = [wb['学生成绩'].cell(i, 1).value for i in range(2, 102) if wb['学生成绩'].cell(i, 4).value == min(list3)]
print(f'语文成绩最高分对应学生:{a},语文成绩最低分对应学生:{b}')
print(f'数学成绩最高分对应学生:{c},数学成绩最低分对应学生:{d}')
print(f'英语成绩最高分对应学生:{e},英语成绩最低分对应学生:{f}')

# 添加总分
wb['学生成绩'].cell(1, 5).value = '总分'
max_ = 0
min_ = 300
# 计算总分
for i in range(2, 102):
    wb['学生成绩'].cell(i, 5).value = \
        wb['学生成绩'].cell(i, 2).value + wb['学生成绩'].cell(i, 3).value + wb['学生成绩'].cell(i, 4).value
    if wb['学生成绩'].cell(i, 5).value > max_:
        max_ = wb['学生成绩'].cell(i, 5).value
    if wb['学生成绩'].cell(i, 5).value < min_:
        min_ = wb['学生成绩'].cell(i, 5).value

# 寻找排名第一和倒数第一的学生
first_stu = []
last_stu = []
for i in range(2, 102):
    if wb['学生成绩'].cell(i, 5).value == max_:
        first_stu.append(wb['学生成绩'].cell(i, 1).value)
    if wb['学生成绩'].cell(i, 5).value == min_:
        last_stu.append(wb['学生成绩'].cell(i, 1).value)

print(f'第一名学生为:{first_stu}')
print(f'倒数第一的学生为:{last_stu}')
# 保存关闭
wb.save('学生成绩.xlsx')
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨奋斗吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值