内容简述:

  • 1、open()函数与文件打开模式
  • 2、file对象提供的函数
  • 3、常见的文件操作示例
  • 4、os模块里的常用函数
  • 5、实用代码示例

1、open()函数与文件打开模式

Python中读写文件非常简单,通过 open()函数 可以打开文件并返回文件对象。我们可以使用help函数来查看open函数具体的参数:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)复制代码

一般了解前两个参数就够了,file参数代表文件名,如果不带上路径的话,会在当前文件夹里查找, 而mode参数代表文件的打开模式,有如下表所示的几种打开模式:

模式 作用
r 只读模式打开,默认
w 写模式打开,若文件存在,先删除,然后重新创建
a 追加模式打开,追加到文件末尾,seek()指向其他地方也没用,文件不存在,自动创建
b 二进制模式打开
t 文本模式打开,默认
+ 可读写模式,可配合其他模式使用,比如r+,w+
x 如果文件已存在,用此模式打开会引发异常
U 通用换行符支持

另外,实用open函数打开文件时要做下:异常捕获,比如下面这样的代码:

f = open('test.txt', 'r')复制代码

如果test.txt文件不存在的话,会抛出一个FileNotFoundError错误,所以需要进行异常捕获。另外,文件使用完毕后必须关闭,文件对象会占用操作系统的资源,操作系统同一时间能打开的文件数量也是有限的。所以为了保证正常或发生异常的时候文件都能关闭,需要把关闭操作写到finally块里,示例代码如下:

try:    f = open('test.txt', 'r')    print(f.read())finally:    if f:        f.close()复制代码

但是每次都要这样写的话显得有些繁琐了,可以使用Python提供的with语句来简化这个操作。

with open('test/txt', 'r') as f:    print(f.read())复制代码

相比每次都要写try-finally异常捕获,这种方式简洁得多,而且不用怕忘记关闭文件。


2、file对象提供的函数

file对象提供了如下表所示的可供调用的方法:

函数 作用
close() 关闭文件,关闭后文件不能再进行读写操作
read(size=-1) 从文件读取指定的字节数,如果未设置或为负数,读取所有
next() 返回文件下一行
readline() 读取整行,包括换行符'\n'
seek(offset, from) 设置当前文件指针的位置,从from(0文件起始位置,1当前位置,
2文件末尾)偏移offset个字节
tell() 返回文件的当前位置
write(str) 将字符串写入文件
writelines(seq) 写入一个序列字符串列表,如果要换行,需要自己加入每行的换行符
truncate([size]) 截断文件并返回截断的字节长度,指定长度就从开头开始截断指定长度,
其余内容删除;不指定的话,从开头截取到当前位置,其余内容删除。

3、常见的文件操作示例

文件的常用操作有创建,写入,读取,还有追加,代码示例如下:

# 1.创建一个可读写的文件def mk_file(file):    with open(file, 'w+', encoding='UTF-8') as f:        print("创建了一个可读写的文件:%s" % file)

# 2.往文件中写入内容def write_to_file(file, content):    with open(file, 'w+', encoding='UTF-8') as f:        f.write(content + '\n')        print("内容写入成功!")

# 3.读取文件里的内容def read_from_file(file):    with open(file, 'r+', encoding='UTF-8') as f:        print("输出文件内容:" + f.read())

# 4.往文件追加内容def append_to_file(file, content):    with open(file, 'a+', encoding='UTF-8') as f:        f.write(content + '\n')        print("内容追加成功!")

if __name__ == '__main__':    file_name = 'test.txt'    mk_file(file_name)    write_to_file(file_name, "人生苦短我用Python!")    read_from_file(file_name)    append_to_file(file_name, "Hello Python!")    read_from_file(file_name)复制代码

运行结果如下

创建了一个可读写的文件:test.txt内容写入成功!输出文件内容:人生苦短我用Python!

内容追加成功!输出文件内容:人生苦短我用Python!Hello Python!复制代码

4、os模块里的常用函数

Python中为我们提供了一个os模块用于处理文件和目录,除此之外它的子模块path模块还提供了文件路径相关的一些函数,通过这些函数可以完成文件或者文件夹的批处理操作,比如文件批量改名,内容替换等。


① os模块常用函数

os模块常用的函数如下表所示:

函数 作用
close() 关闭文件,关闭后文件不能再进行读写操作
getcwd() 返回当前工作目录
chdir(path) 改变当前工作目录
listdir(path='.') 不写参数默认列举当前目录下所有文件和文件夹,'.'当前目录,
'..'上一层目录
mkdir(path) 创建文件夹,若存在会抛出FileExistsError异常
mkdirs(path) 可用于创建多层目录
remove(path) 删除指定文件
rmdir(path) 删除目录
removedirs(path) 删除多层目录
rename(old,new) 重命名文件或文件夹
system(command) 调用系统提供的小工具,比如计算器
walk(top) 遍历top参数指定路径下所有子目录,返回一个三元组(路径,
[包含目录],[包含文件])
curdir 当前目录(.)
pardir 上一节目录(..)
sep 路径分隔符,Win下是'\',Linux下是'/'
linesep 当前平台使用的行终止符,win下是'\r\n',Linux下是'\n'
pathsep 输出用于分割文件路径的字符串
name 当前使用的操作系统
stat(path) 获取文件目录信息
environ 获取系统环境变量
system("bash command") 执行shell命令,直接显示

② os.path模块常用函数

os.path模块常用的函数如下表所示:

函数 作用
dirname(path) 获得路径名
basename(path) 获得文件名
join(path1[,path2[,…]]) 将路径名与文件名拼接成一个完整路径
split(path) 分割路径与文件名,返回元组(f_path, f_name),如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或目录
是否存在
splitext(path) 分隔文件名与扩展名
getsize(file) 获得文件大小,单位是字节
getatime(file) 获得文件最近访问时间,返回的是浮点型秒数
getctime(file) 获得文件的创建时间,返回的是浮点型秒数
getmtime(file) 获得文件的修改时间,返回的是浮点型秒数
exists(path) 判断路径(文件或目录)是否存在
isabs(path) 判断是否为决定路径
isdir(path) 判断是否存在且是一个目录
isfile(path) 判断是否存在且是一个文件
islink(path) 判断是否存在且是一个符号链接
ismount(path) 判断是否存在且是一个挂载点
samefile(path1,path2) 判断两个路径是否指向同一个文件

5、实用代码示例

① 批量替换多个文件中的内容

比如说现在有这样一批文件,文件内容都是:

1.Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++
里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员
以优雅的思维方式进行复杂的编程。

现在需要把文件里的Java都替换成Python,我们可以通过编写脚本来完成这项繁琐的工作,具体代码如下:

import os

def replace(dir_path, word_before, word_after):    file_list = []    # 遍历获得文件地址    for f in os.listdir(dir_path):        file_list.append(os.path.join(dir_path, f))    # 打开文件,按行读取,替换对应内容    for file in file_list:        with open(file, 'r+', encoding='UTF-8') as f:            content = f.read()            f.seek(0)            f.truncate()            f.write(content.replace(word_before, word_after))

if __name__ == '__main__':    replace(os.path.join(os.getcwd(), 'doc'), 'Java', 'Python')复制代码

运行结果如下

1.Python是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Python语言具有功能强大和简单易用两个特征。Python语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。复制代码

② 批量文件重命名

有时我们需要对一堆文件进行批量命名,比如需要把下面这样的图片名字统一改成image_1这样的形式。在学习本节之前,你可能需要复制下image_,然后一个个图片重命名,学习完本节后我们可以动手写一个批量文件重命名的脚本。

程序还是比较简单的,分两步:

  • 1.获取某个文件夹里所有的文件完整路径名
  • 2.调用file对象的rename函数仅限替换

具体代码如下

import osdef rename(file_dir, model_name, file_type):    pos = 1    # 获取文件夹下所有文件(包括文件夹)    file_list = os.listdir(file_dir)    for file in file_list:        # 判断是否为对应后缀的文件        if file.endswith(file_type):            try:                # 旧文件名                old_name = os.path.join(file_dir, file)                # 新文件名                new_name = os.path.join(file_dir, model_name + str(pos) + file_type)                os.rename(old_name, new_name)                pos = pos + 1            except:                continuerename(os.path.join(os.getcwd(), 'res'), 'image_', '.png')复制代码

运行结果如下

1s不到改完108个图片,简直不要太爽,真人生苦短,我用Python!


如果本文对你有所帮助,欢迎
留言,点赞,转发
素质三连,谢谢?~


转载于:https://juejin.im/post/5caac7a5518825471c71136e

猪行天下之Python基础——7.1 文件存储相关推荐

  1. 猪行天下之Python基础——1.1 Python开发环境搭建

    内容简述: 1.选择Python 2 还是 Python 3? 2.Python环境的下载与安装 1.选择Python 2还是Python 3 Python 3 在设计时并「没有考虑向下兼容」,即Py ...

  2. 猪行天下之Python基础——10.1 Python常用模块(上)

    内容简述: 1.time和datetime模块 2.logging模块 PS:如果你想搜索安装某个模块或者发布一个自己的模块可以到移步到:pypi.org/ 1.time和datetime时间模块 ① ...

  3. python入门之函数调用第二关_猪行天下之Python基础——5.1 函数(上)

    内容简述: 1.函数定义 2.形参与实参 3.关键字参数与默认参数 4.可变参数 5.全局变量与局部变量 6.内部函数 7.闭包 8.lambda表达式 9.递归 1.函数定义 我们可以将一些实现特定 ...

  4. python用来初始化对象属性的是_猪行天下之Python基础——8.1 类与对象

    内容简述: 1.面相对象的理解 2.类与对象 3.继承 4.组合 5.对象相关的内置函数 1.面相对象的理解 考虑到部分读者可能没有接触过面向对象编程,所以先介绍下面向对象的一些特征,形成一个面向对象 ...

  5. 阡陌路-车行天下之汽车基础知识

    阡陌路-车行天下之汽车基础知识 (2013-06-29 10:37:23)转载▼ 标签: 汽车 基础 分类: 指南区 汽车基础知识 1.什么是ABS ABS是Anti-LockBrakeSystem的 ...

  6. Python基础知识点拾遗---文件IO(os、filecmp、shutil库)、sys库、序列化(pickle)、类

    Python基础知识点拾遗 文件IO 文本 目录 os 获取文件的创建.修改及最近访问时间 获取当前文件的大小 获取当前的登录用户名称 获取当前的cpu核数 调用操作系统底层的random生成器 sh ...

  7. Python 基础 之 zipfile 文件夹压缩/解压方法的简单整理

    Python 基础 之 zipfile 文件夹压缩/解压方法的简单整理 目录

  8. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  9. Python基础day07【文件读写、文件夹操作、面向对象(类、对象)】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]   目录 01.复习 1.1.递归函数参数问题 1.2.格式化输出位数 1.3.extend函数解 ...

最新文章

  1. 说得太好了!阿里巴巴为什么不用 ZooKeeper 做服务发现?
  2. 瓷博会开幕,《锦绣中华》引围观
  3. 9个数据科学中常见距离度量总结以及优缺点概述
  4. python写一个系统-使用Python写一个量化股票提醒系统
  5. inodesusedpercent_Linux运维监控基础采集项
  6. SQL Server 跨库同步数据
  7. Java BigDecimal restder()方法与示例
  8. Openssl 嵌入式arm移植笔记
  9. C#捕获控制台(console)关闭事件
  10. PTP Precision Time Protocol精确时间协议 IEEE1588解决方案(含PTP和PPS)
  11. 计算机语言环境变量,Win7环境变量中如何切换语言
  12. 华为android界面强刷救砖教程,华为P9刷机失败变砖开不了机了怎么办 华为P9救砖方法...
  13. 当“双态IT”已成共识 如何打造以数据驱动的运维平台?
  14. 不借助 vue-cli 工具自行搭建 vue 项目
  15. 同时删除多个 Word 文档空白行
  16. 机器学习:蒙特卡罗方法
  17. 终端上网行为管理开源框架(柏晓技术deskvideosys)
  18. 闲聊人工智能产品经理(AIPM)—人工智能产品需求
  19. 百度开源AI硬件开发平台BIE-AI-Box和BIE-AI-Board
  20. Python基础入门之切片

热门文章

  1. 反汇编的应用1-软件破解
  2. 2015 年最受 Linux 爱好者欢迎的软硬件大盘点
  3. md5加密用户登陆遇到的问题及解决办法
  4. Visual Studio 快捷键 转载
  5. linux 虚拟化之rhev Hypervisor 安装
  6. Yii2与Yii1的模块中Layout使用区别
  7. zabbix自动发现oracle表空间并监控其使用率
  8. Web Components 简述
  9. Oracle中Scott账户常见表的样本查询编程与数据库
  10. ADO.NET 快速入门(四):从数据库填充 DataSet