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']
目录
相关文章
|
2月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
781 2
|
3月前
|
安全 JavaScript 开发者
Python 自动化办公神器|一键转换所有文档为 PDF
本文介绍一个自动化批量将 Word、Excel、PPT、TXT、HTML 及图片转换为 PDF 的 Python 脚本。支持多格式识别、错误处理与日志记录,适用于文档归档、报告整理等场景,大幅提升办公效率。仅限 Windows 平台,需安装 Office 及相关依赖。
159 0
|
19天前
|
存储 数据采集 监控
Python定时爬取新闻网站头条:从零到一的自动化实践
在信息爆炸时代,本文教你用Python定时爬取腾讯新闻头条,实现自动化监控。涵盖请求、解析、存储、去重、代理及异常通知,助你构建高效新闻采集系统,适用于金融、电商、媒体等场景。(238字)
191 2
|
1月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
2月前
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
80 4
|
2月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
3月前
|
缓存 数据可视化 Linux
Python文件/目录比较实战:排除特定类型的实用技巧
本文通过四个实战案例,详解如何使用Python比较目录差异并灵活排除特定文件,涵盖基础比较、大文件处理、跨平台适配与可视化报告生成,助力开发者高效完成目录同步与数据校验任务。
131 0
|
4月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
815 0
|
1月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南

热门文章

最新文章

推荐镜像

更多