专题2:python操作文件(txt,csv,word,pdf,图片等)—一次性搞清楚,让你提高办公效率


文章主要分为三部分

  • 首先介绍一下python中操作文件的方法
  • 具体介绍如何操作不同类型的文件,例如txt、csv、word、pdf等
  • 为什么都说python能够提高办公效率?

1 文件操作基础

1.1 文件

文件可以认为是相关记录或者存放在一起的数据集合
在计算机系统中文件可分为文本文件二进制文件
python中的os模块有文件相关的各种方法,之后会更一篇博客。今天我们把重点放在文件的读写操作

1.2 读写文件从这里开始

打开一个文件
在python中用open函数打开文件
在与文件取得关联之后,才可以执行文件的写入读取
input = open(文件路径,读写模式,encoding=编码格式)

1.21 读取文件的5种模式
模式作用
r读取模式
w写入模式
a追加模式
rb二进制数据读取模式
wb二进制数据读取模式

还有一种写法是在常规模式后面添加 + 号,如 r+、w+、a+、rb+、wb+ 等
+ 号的作用是赋予模式在原有功能的基础初上补充并完善所有访问操作功能。
如 r+ 代表就是读写文件模式,不仅仅是只读模式。

1.22 文件读取
# 读取文件的两种方式
# 绝对路径
f = opne("D:/java/1.txt",'r')
# 相对路径
f = open('1.txt','r')
f.close()  #不要忘记

open函数在获取文件关联时,如果文件不存在会创建文件

1.23 文件写入
# 读取文件的两种方式
f = opne("D:/java/1.txt",'w')
f.write("你好啊")
f.close()
1.3 with

使用 with 语句,很好地处理了上下文环境和异常情况,自动释放对象内存。
方式:with open( 文件路径 , 读写模式 ) as 文件对象:


在这里插入图片描述

2 操作各种类型的文件

2.0 点一点哦

哈哈哈,txt就略去了,最简单的操作,前文也有示例代码,下边直接上代码,注释讲解

2.1 json
import json   # 引入模块

# json是当前使用的非常广泛的一种数据传输格式,序列化就是在字符串和python的dict、list之间互转
dictdata = {'a':'中文','b':2,'c':3} # 这是个字典
jsondata = json.dumps(dictdata , ensure_ascii = False) # 返回的是字符串,json字符串结构的数据
print('json:', jsondata)                               # dict转json对象
print('jsontype', type(jsondata))

print("*"*30)

jsonobj = json.loads(jsondata)                         # 返回的是对象
print(type(jsonobj))
print(jsonobj)

print("*"*30)

# 将jason数据存入文件
datas = [{'a':1,'b':2,'c':3},{'d':1,'e':2,'f':3},{'g':1,'h':2,'i':3}]
with open("data/jsonfile.json", 'w', encoding='utf-8') as fp:
    jsonstr = json.dumps(datas, ensure_ascii=False)
    print(jsonstr)
    # print(jsonstr)
    a = json.dump(jsonstr, fp)
    print(type(a))
    pass

print("*"*30)

with open("data/jsonfile.json", 'r', encoding='utf-8') as fp:
    jsonstrs = json.load(fp) # 返回的是字符串
    jsonobj = json.loads(jsonstrs) # 如果传入的是json对象的字符串数组,loads返回的是个list,list里再存的是字典
    for obj in jsonobj:
        print(type(obj))

    print(type(jsonobj))
    print(jsonstrs)
    # jsonobj = json.loads(jsondata)
    # print(jsonstr)
    pass
2.2 csv
import csv

# 1.创建一个csv文件,并向csv文件写入数据
csvdata = open('data/goods.csv', 'w+', encoding='gb18030' , newline='')

column = ['id','name','price','num']
data   = [(1,'苹果',2,100),
          (2,'桔子',2,100),
          (3,'香蕉',2,100),]
writer = csv.writer(csvdata)
writer.writerow(column)
writer.writerows(data)
csvdata.flush()
csvdata.close()

# 2.读取csv文件
csvdata = open('data/goods.csv', 'r+', encoding='gb18030')
reader = csv.reader(csvdata)
print(reader)
for line in reader:
    print(line)
csvdata.close()

# 3.dictreader
csvdata = open('data/goods.csv', 'r+', encoding='gb18030')
reader = csv.DictReader(csvdata)
print(reader)
for line in reader:
    print(dict(line))
csvdata.close()

# 4.dictwrite
dictdata = [{'id': 1,'name':'苹果','price':2,'num':100},
            {'id': 2, 'name': '苹果', 'price': 2, 'num': 100},
            {'id': 3, 'name': '苹果', 'price': 2, 'num': 100},
            ]
title = [key for key in dictdata[0].keys()]
csvdata = open('data/dictgoods.csv', 'w', encoding='gb18030')

dictwriter = csv.DictWriter(csvdata, fieldnames=title)
dictwriter.writeheader()

for data in dictdata :
    dictwriter.writerow(data)

dictwriter.writerows(dictdata)

csvdata.close()

2.3 excel

# 导入xlwt模块
import xlwt
import os

# excel文件如操作
# 步骤1:确定excel文件的绝对路径
excelPath = os.path.join(os.getcwd(), 'data/test1.xls')

# 步骤2:创建工作簿对象workbook
workbook = xlwt.Workbook(encoding='utf-8')

# 步骤3:创建单页对象sheet
sheet = workbook.add_sheet(u'测试单页1')

# 步骤4:写入标题行数据
# 步骤4-1:获取标题数据集
headers = ['标题1', '标题2', '标题3']
# 步骤4-2:使用循环将标题headers写入excel第1行(rowIndex = 0)
for colIndex in range(len(headers)):
    # 步骤4-3:写入标题列表数据
    sheet.write(0, colIndex, headers[colIndex])

# 步骤5:写入内容数据
# 步骤5-1:外层for循环控制行数
for rowIndex in range(1, 5):
    # 步骤5-2:内层for循环控制列数
    for colIndex in range(len(headers)):
        # 步骤5-3:写入内容数据
        sheet.write(rowIndex, colIndex, (rowIndex + colIndex))

# 步骤6:保存工作簿
workbook.save(excelPath)
print('>> Excel文件写入完毕.')
# 导入模块
import xlrd
import os

# 读取指定的excel文件数据
# 步骤1:设置excel文件的绝对路径
excelPath = os.path.join(os.getcwd(), 'data/test2.xls')

# 步骤2:获取到excel文件的工作簿(workbook对象)
workbook = xlrd.open_workbook(excelPath)

# 步骤3:获取到当前工作簿的操作单页对象
# 步骤3-1:获取当前工作簿中的所有有效的单页对象
sheets = workbook.sheet_names()
# 步骤3-2:获取当前操作的单页对象
worksheet = workbook.sheet_by_name(sheets[0])

# 步骤4:使用嵌套for循环读取每一个cell中的数据
# 外层循环控制行数
for rowIndex in range(worksheet.nrows):
    # 得到当前行的数据对象
    rowData = worksheet.row(rowIndex)
    for colIndex in range(worksheet.ncols):
        # 输出数据
        print(worksheet.cell_value(rowIndex,colIndex) + '\t', end='')
    print()
2.4 pdf

pdf今天暂时先不分析,后面会专门更新一篇博文,把pdf结合实际案例中讲解。
详情见这篇文章

2.5 json和excel之间的转化
# 导入模块
import json
import os
import xlrd

'''
    @name: excel2json
    @args: str, str
    @return: none
    @date: 2018-04-25
'''
def excel2json(excelPath, jsonPath):
    # 变量
    data = []
    # 读取excel文件    
    # 步骤1:获取到指定路径excel文件的工作簿对象workbook
    workbook = xlrd.open_workbook(excelPath)
    # 步骤2:获取当前的有效的数据单页对象sheet
    # 步骤2-1:获取单页对象集
    sheets = workbook.sheet_names()
    # 步骤2-2:获取可操作的数据单页
    worksheet = workbook.sheet_by_name(sheets[0])
    # 步骤3:读取sheet单页对象中的cell数据
    keys = [worksheet.cell_value(0, colIndex) for colIndex in range(worksheet.ncols)]
    # 外层循环控制行数
    for rowIndex in range(1, worksheet.nrows):
        # 内层循环控制列数
        values = [worksheet.cell_value(rowIndex, colIndex) for colIndex in range(worksheet.ncols)]
        # 生成当前循环到的字典数据
        print(list(zip(keys, values))) # 将两个列表集合转为元组对象,以最短的那个集合为基础
        list1 = ['a','b','c','d','e']
        list2 = [1,2,3,4]
        # [('a', 1) ('b',2)  ('c',3) ('d',4)]
        print(dict(zip(list1, list2)))  # 技巧 两个列表构成字典的简单办法
        item = dict(zip(keys, values))
        print(item)
        # 将每一个字典数据添加到data列表集合中
        data.append(item)

    #print('>> data:{0}'.format(data))
    print('>> excel数据读取完毕并完成格式转')

    # 写入json文件
    # 步骤1:打开json文件(获取程序与json文件的关联引用)
    with open(jsonPath, 'w') as jsonfile:
        # 使用json.dumps()序列化处理
        jsonData = json.dumps(data, ensure_ascii=False)
        # 步骤2:序列化数据并写入文件
        jsonfile.write(jsonData)
        print('>> json文件写入完毕.')
        pass

# 脚本入口
if __name__ == '__main__':
    # excel文件路径
    excelPath = os.path.join(os.getcwd(), 'data/test2.xls')
    # json文件路径
    jsonPath = os.path.join(os.getcwd(), 'data/test2_bak.json')
    # 调用函数
    excel2json(excelPath, jsonPath)
    print('>> excel转换json文件操作完毕.')

#-*- coding:utf-8 -*-
# 导入模块
import json
import os
import xlwt

'''
    @name: json2excel
    @args: str, str
    @return: none
    @date: 2018-04-25
'''
def json2excel(jsonPath, excelPath):
    'json转excel文件'
    # 设置列表变量
    data = []
    # 读取json文件
    # 步骤1:使用with语句以读取模式打开json文件
    with open(jsonPath, 'r+') as jsonfile:
        # 步骤2:使用json.load()函数获取json文件数据并反序列化列表对象
        data = json.load(jsonfile)
        # print('data str', type(data))
        jsdata = json.loads(data)
        print(type(jsdata))
        #print('>> 测试:\n{0}'.format(data))
        print('>> json文件读取完毕.')
        pass

    # 写入excel文件
    # 步骤1:获取工作簿对象workbook
    workbook = xlwt.Workbook(encoding='utf-8')
    # 步骤2:获取单页对象sheet
    sheet = workbook.add_sheet('人员信息')
    # 步骤3:写入标题行
    headers = [k for k in jsdata[0]]
    for colIndex in range(len(headers)):
        sheet.write(0, colIndex, headers[colIndex])
    # 步骤4:写入数据内容
    contents = [[v for v in item.values()] for item in jsdata]
    for rowIndex in range(1, len(contents)+1):
        for colIndex in range(len(headers)):
            sheet.write(rowIndex, colIndex, contents[rowIndex-1][colIndex])
    # 步骤5:工作簿保存
    workbook.save(excelPath)
    print('>> excel文件写入完毕.')
    pass

# 脚本入口
if __name__ == '__main__':
    # 步骤1:设置json文件的路径
    jsonPath = os.path.join(os.getcwd(), 'data/jsonfile.json')
    # 步骤2:设置excel文件的路径
    excelPath = os.path.join(os.getcwd(), 'data/data_bak.xls')
    # 步骤3:调用函数
    json2excel(jsonPath, excelPath)
    print('>> 文件格式转换完毕.')

3 总结

自从python语言大火之后,我们经常会看到各种文章讲python如何如何提高工作效率,但是你仔细想过它到底在哪些方面有助于我们的工作吗?

其实文件操作这一部分就有很大的门路,我在上文中也只是简单的介绍了python文件操作部分知识,作为一个开发来说,可能文件在平时要用也少,除专门做这种需求的开发。在实际工作中,可能对部分岗位来说,操作各种表格数据是日常工作,那么就需要多多去研究一下python中每个模块实现过程,以及相关的方法。

文章到此结束了,最后一通胡说,谢谢观看了,点赞关注不迷路哦!
其实,还有许多的方法没有讲到,如果有些需求比较复杂,记得多去看看源码,一定有相应的方法可以实现.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值