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']
目录
相关文章
|
26天前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
144 61
|
8天前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
49 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
2天前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
|
3天前
|
存储 JSON 对象存储
如何使用 Python 进行文件读写操作?
大家好,我是V哥。本文介绍Python中文件读写操作的方法,包括文件读取、写入、追加、二进制模式、JSON、CSV和Pandas模块的使用,以及对象序列化与反序列化。通过这些方法,你可以根据不同的文件类型和需求,灵活选择合适的方式进行操作。希望对正在学习Python的小伙伴们有所帮助。欢迎关注威哥爱编程,全栈路上我们并肩前行。
|
18天前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
18天前
|
存储 安全 数据可视化
用Python实现简单的任务自动化
本文介绍如何使用Python实现任务自动化,提高效率和准确性。通过三个实用案例展示:1. 使用`smtplib`和`schedule`库自动发送邮件提醒;2. 利用`shutil`和`os`库自动备份文件;3. 借助`requests`库自动下载网页内容。每个案例包含详细代码和解释,并附带注意事项。掌握这些技能有助于个人和企业优化流程、节约成本。
50 3
|
1月前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
78 7
|
1月前
|
计算机视觉 Python
如何使用Python将TS文件转换为MP4
本文介绍了如何使用Python和FFmpeg将TS文件转换为MP4文件。首先需要安装Python和FFmpeg,然后通过`subprocess`模块调用FFmpeg命令,实现文件格式的转换。代码示例展示了具体的操作步骤,包括检查文件存在性、构建FFmpeg命令和执行转换过程。
58 7
|
3月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
86 4
|
4天前
|
机器学习/深度学习 人工智能 运维
基于AI的自动化事件响应:智慧运维新时代
基于AI的自动化事件响应:智慧运维新时代
59 11

热门文章

最新文章