Python进阶笔记(2):自动化处理文件(中)

简介: Python进阶笔记(2):自动化处理文件

2.4 文件对象的常用方法


文件对象方法 执行操作
read([size]) 从文件中读取size个字节或字符的内容返回。若省略[size],则读取到文件末尾,即一次读取文件所有内容
readline() 从文本文件中读取一行内容
readlines() 把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
write(str) 将字符串str内容写入文件
wirtelines(s_list) 将字符串列表s_list写入文本文件,不添加换行符
seek(offset[,whence]) 把文件指针移动到新的位置,offset表示相对于whence的位置;offset为正往结束方向移动,为负往开始方向移动。whence不同的值代表不同含义:0:从文件头开始计算(默认值);1:从当前位置开始计算;2:从文件尾开始计算
tell() 返回文件指针的当前位置
truncate([size=file.tell()]) 截取文件到size个字节,默认是截取到文件指针当前位置
flush() 把缓冲区的内容写入文件,但不关闭文件
close() 关闭文件


read():读出


file = open('a.txt', 'r')
print(file.read())



readline():读一行


file = open('a.txt', 'r')
#print(file.read())
print(file.readline())



readlines():将每一行元素作为独立字符串,放入列表当中


file = open('a.txt', 'r')
#print(file.read())
#print(file.readline())
print(file.readlines())


['中国\n', '美丽']


write():写入


file = open('c.txt', 'w')
file.write('hello')
file.close()



writelines():将字符串列表s_list写入文本文件,不添加换行符


file = open('c.txt', 'a')
lst = ['java', 'go', 'python']
file.writelines(lst)
file.close()



seek()


file = open('a.txt', 'r')
file.seek(2)        # 一个中文两个字节,跳过了国字
print(file.read())
print(file.tell())  # 中国,回车,美丽总共10字节
file.close()


美丽
10


tell()



file = open('b.txt', 'r')
print(file.read())
print(file.tell())  # 中国,回车,美丽总共10字节
file.close()


pythonpython
12


flush()


file = open('d.txt', 'a')
file.write('hello')
file.flush()        # 后面可以继续写内容
file.write('world')
file.close()        # 后面不可以写代码



encoding=‘utf-8’



f = open('C:\\Users\\zdb\\Desktop\\abc.txt', encoding='utf-8') 
#encoding='utf-8'   防止乱码加上去的
print(f)
print(f.read())    #对的,读,并输出


<_io.TextIOWrapper name='C:\\Users\\zdb\\Desktop\\abc.txt' mode='r' encoding='utf-8'>
abcdefg


例2



file_name = input('请输入需要打开的文件名:')
f = open(file_name)
print('文件的内容是:')
for each_line in f:
    print(each_line)



with open(‘a.txt’, ‘r’) as file::这样就不需要关闭文件那一行代码了


with open('a.txt', 'r') as file:
    print(file.read())


中国
美丽


例2


with open('win.png', 'rb') as file:     # 以二进制读打开
    with open('copy.png', 'wb') as target_file:  # 以二进制写打开
        target_file.write(file.read())   # 目标文件写入原文件被读的


2.5 文件路径:相对路径、绝对路径


相对路径:只能读取到同一目录里面的文件


  • 1、text_files与主程序在一个目录


  • 2、读取text_file里面的pi_digits.txt


  • 3、主程序代码如下


with open('text_files\pi_digits.txt') as file_object:
#open接受一个参数:要打开的文件的名称
#关键字with在不需要访问文件后将其关闭
    contents = file_object.read()
    #read读取这个文件的全部内容,并将其作为长串字符存储在变量contents中
    print(contents)   #打印输出


绝对路径:读取系统任何地方的文件


f = open('C:\\Users\\zdb\\Desktop\\abc.txt', encoding='utf-8')
#encoding='utf-8'   防止乱码加上去的
print(f)
print(f.read())    #对的,全输出


例2



f = open('C:\\Users\\zdb\\Desktop\\abc.txt', encoding='utf-8')
#f.seek(0,0)
lines = list(f)
for each_line in lines:
    print(each_line.rstrip())   #rstrip去掉\n


abcdefg
123
456


三. 组织文件


3.1 shutil模块复制、移动、删除、改名文件\文件夹


1. 复制文件:shutil.copy()


例:源文件在桌面,名为a.txt


import shutil, os
os.chdir('C:\\Users\\zdb\\Desktop\\')    # 设置工作路径
shutil.copy('C:\\Users\\zdb\\Desktop\\a.txt', 'E:\\')   # 复制到E盘
shutil.copy('C:\\Users\\zdb\\Desktop\\a.txt', 'E:\\b.txt')  # 重新命名为b.txt



2. 复制文件夹:shutil.copytree()


例:源文件在桌面上,a文件夹里面有个a.txt


import shutil, os
os.chdir('C:\\Users\\zdb\\Desktop\\')
shutil.copytree('C:\\Users\\zdb\\Desktop\\a', 'E:\\b')   # 复制到E盘文件夹命名为b



3. 移动文件:shutil.move()


例1:源文件在a下a.txt,E盘有个空文件夹b


import shutil, os
os.chdir('C:\\Users\\zdb\\Desktop\\')
shutil.move('C:\\Users\\zdb\\Desktop\\a\\a.txt', 'E:\\b')   # 把TXT移动到E盘b文件夹



例2:移动文件,且重命名:桌面有a\a.txt,把它移动到E盘b文件夹,且重命名为b.txt(实现改名)


注意:若目标文件b夹不存在会报错


import shutil, os
os.chdir('C:\\Users\\zdb\\Desktop\\')
shutil.move('C:\\Users\\zdb\\Desktop\\a\\a.txt', 'E:\\b\\b.txt')   # 把TXT移动到E盘b文件夹,且重命名b



3. 删除文件


  • 用os.unlink(path)将删除path处的文件


  • 用os.rmdir(path)将删除path处的文件夹。该文件夹必须为空


  • 用shutil.rmtree(path)将删除path处的文件夹。文件夹中所有文件也删除


注意:删除不可逆,不要轻易删除,最好先打印输出一遍要删除的文件,防止删错文件


import os
for filename in os.listdir():
    if filename.endswith('.rxt'):
        print(filename)
        #os.unlink(filename)


  • shutil.rmtree()函数删除不可逆,但是使用send2trash模块可以删除到回收站,而不是永久删除跳过回收站


import send2trash
file = open('C:\\Users\\zdb\\Desktop\\a.txt', 'a')   # 创建a.txt
file.write('abc123')                                 # 写入数据
file.close()                                         # 关闭文件
send2trash.send2trash('C:\\Users\\zdb\\Desktop\\a.txt')  #删除到回收站



例:遍历目录树


import os
# os.walk()返回三个值:
#                   当前文件夹名称的字符串
#                   当前文件夹中子文件夹的字符串的列表
#                   当前文件夹中文件的字符串的列表
for folderName, subfolders, filenames in os.walk("c:\\delicious"):
    print("The current folder is " + folderName)
for subfolder in subfolders:
    print("Subfolders of " + folderName + ": " + subfolder)
for filename in filenames:
    print("FILE INSIDE " + folderName + ": " + filename)


3.2 处理压缩文件:读取、解压、创建


1. 读取zip文件


要读取zip文件,就要先创建一个ZipFile对象,用zipfile.ZipFile()函数创建


例:example压缩包中有a文件夹和c.txt文件,a文件夹下还有a.txt和b.txt



import zipfile, os
os.chdir('C:\\Users\\zdb\\Desktop\\')
example_zip = zipfile.ZipFile('example.zip')
print(example_zip.namelist())  # 输出文件名列表
file = example_zip.getinfo('c.txt')
print(file.file_size)       # 输出源文件大小
print(file.compress_size)   # 输出压缩后文件大小
example_zip.close()


['a/', 'a/a.txt', 'a/b.txt', 'c.txt']
0
0


2. 从zip文件中解压缩


  • ZipFile对象的extractall()方法从zip文件中解压缩所有文件和文件夹,放到当前工作目录中


import zipfile, os
os.chdir('C:\\Users\\zdb\\Desktop\\')
example_zip = zipfile.ZipFile('example.zip')
example_zip.extractall()
example_zip.close()


解压前:



解压后如下:压缩包不会消失



  • example_zip.extract()可解压单个文件,第一个参数指定需解压的文件;第二个参数指定路径


import zipfile, os
os.chdir('C:\\Users\\zdb\\Desktop\\')
example_zip = zipfile.ZipFile('example.zip')
example_zip.extract('c.txt', 'C:\\Users\\zdb\\Desktop\\') # 将c.txt解压到桌面
example_zip.close()


3. 创建和添加到zip文件


  • 要创建压缩文件需要用写的形式打开文件,write()写入,第一个参数表示需要压缩的文件,第二个参数是“压缩类型”参数。


import zipfile, os
os.chdir('C:\\Users\\zdb\\Desktop\\')
new_zip = zipfile.ZipFile('new.zip', 'w')
new_zip.write('c.txt', compress_type=zipfile.ZIP_DEFLATED)  # 把c.txt添加到new_zip里面
new_zip.close()



四. 处理xlsx


工作簿基本介绍:


  • 一个工作簿扩展名为.xlsx


  • 每个工作簿可以包含多个表


  • 列名ABCD、行名1234




4.1 openpyxl介绍


安装:pip install openpyxl


openpyxl中有三个不同层次的类,Workbook是对工作簿的抽象,Worksheet是对表格的抽象,Cell是对单元格的抽象,每一个类都包含了许多属性和方法。


操作Excel的一般场景:


  1. 打开或者创建一个Excel需要创建一个Workbook对象


  1. 获取一个表则需要先创建一个Workbook对象,然后使用该对象的方法来得到一个Worksheet对象


  1. 如果要获取表中的数据,那么得到Worksheet对象以后再从中获取代表单元格的Cell对象


Workbook对象提供的部分属性如下:


  • active:获取当前活跃的Worksheet


  • worksheets:以列表的形式返回所有的Worksheet(表格)


  • read_only:判断是否以read_only模式打开Excel文档


  • encoding:获取文档的字符集编码


  • properties:获取文档的元数据,如标题,创建者,创建日期等


  • sheetnames:获取工作簿中的表(列表)


import openpyxl
wb = openpyxl.load_workbook('C:\\Users\\zdb\\Desktop\\test.xlsx')
print('workbook的常见属性:------------------')
print('当前活跃的worksheet为:', wb.active)
print('表格有:', wb.worksheets)
print('是否为只读打开:', wb.read_only)
print('编码格式为:', wb.encoding)
print('文档的标题、创建者、创建日期为:', wb.properties)
print('工作簿中的表:', wb.sheetnames)


workbook的常见属性:------------------
当前活跃的worksheet为: <Worksheet "Sheet3">
表格有: [<Worksheet "Sheet1">, <Worksheet "Sheet2">, <Worksheet "Sheet3">]
是否为只读打开: False
编码格式为: utf-8
文档的标题、创建者、创建日期为: <openpyxl.packaging.core.DocumentProperties object>
Parameters:
creator='zdb', title=None, description=None, subject=None, identifier=None, language=None, created=datetime.datetime(2015, 6, 5, 18, 19, 34), modified=datetime.datetime(2021, 3, 8, 2, 52, 52), lastModifiedBy='zdb', category=None, contentStatus=None, version=None, revision=None, keywords=None, lastPrinted=None
工作簿中的表: ['Sheet1', 'Sheet2', 'Sheet3']
相关文章
|
1天前
|
存储 人工智能 测试技术
python自动化测试实战 —— CSDN的Web页面自动化测试
python自动化测试实战 —— CSDN的Web页面自动化测试
8 0
|
1天前
|
Web App开发 设计模式 测试技术
python自动化测试实战 —— 自动化测试框架的实例
python自动化测试实战 —— 自动化测试框架的实例
4 0
|
1天前
|
监控 数据可视化 IDE
python自动化测试实战 —— 单元测试框架
python自动化测试实战 —— 单元测试框架
8 2
|
1天前
|
Web App开发 JavaScript 测试技术
python自动化测试实战 —— WebDriver API的使用
python自动化测试实战 —— WebDriver API的使用
6 1
|
1天前
|
Web App开发 测试技术 Python
【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver
【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver
6 0
|
1天前
|
测试技术 BI Python
【如何学习Python自动化测试】—— HTMLTestRunner 生成测试报告
【如何学习Python自动化测试】—— HTMLTestRunner 生成测试报告
5 0
|
1天前
|
Java 测试技术 数据库连接
【如何学习Python自动化测试】—— Python 的 unittest 框架
【如何学习Python自动化测试】—— Python 的 unittest 框架
4 0
|
1天前
|
存储 网络协议 测试技术
【如何学习Python自动化测试】—— Cookie 处理
【如何学习Python自动化测试】—— Cookie 处理
7 1
|
1天前
|
Web App开发 JavaScript 测试技术
【如何学习Python自动化测试】—— 警告框处理
【如何学习Python自动化测试】—— 警告框处理
6 0
|
1天前
|
测试技术 Python Windows
【如何学习Python自动化测试】—— 多层窗口定位
【如何学习Python自动化测试】—— 多层窗口定位
8 1

热门文章

最新文章