点击蓝色“潭时录”关注我丫

每天和小潭一起快乐的学习~

你好,我是在学python的小潭。通过昨天的文章23-python中第三方模块的安装和使用我们熟悉了python中通过pip命令安装第三方模块的知识,今天我们将学习下python中编码格式和文件的相关操作知识。

(一)编码格式介绍

常见的字符编码格式

  • python的解释器使用的是Unicode(内存)

  • .py文件在磁盘上使用UTF-8存储(外存)

可在python文件中头部添加#encoding=gbk来指定.py使用gbk的编码格式。

(二)文件的读写原理

文件的读写又被称为'IO操作',操作流程和操作原理如下图所示。

(三)文件读写操作

  • 内置函数open()创建文件对象

  • 语法规则

file表示被创建的文件对象,open()为创建文件对象的函数,filename为要创建或打开的文件名称,mode为打开模式[可选,默认为只读],encoding为文件的编码格式[可选,默认文本文件中字符的编码格式为gbk]。

file = open(filename [,mode, encoding])

代码示例[同级目录下准备a.txt]:

               

file = open('a.txt', mode='r', encoding='UTF-8')print(file.readlines())file.close()

结果输出:

['小潭学python']

(四)文件对象常用的方法

文件的类型,按照文件中数据的组织形式,可以分为以下两大类

  • 文本文件,存储普通字符文本,默认为unicode字符集,可以使用记事本程序打开

  • 二进制文件,把数据内容用字节进行存储,无法使用记事本打开,需要使用特定的软件打开,例如mp4文件,jpg图片或doc文档等。

1.文件对象常用的打开模式:

打开模式 描述
r

以只读模式打开文件,文件的指针将会放在文件的开头

w

以只写模式打开文件,如果文件不存在则创建,

如果文件存在,则覆盖原有内容,文件指针在文件开头

a

以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,

如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾

b

以二进制模式打开文件,不能单独使用,需要和其他模式一起使用,如rb,wb等

+

以读写模式打开文件,不能单独使用,需要和其他模式一起使用,如a+

代码示例:

# w模式file = open('b.txt', 'w')file.write('小潭')file.close()# a模式file = open('b.txt', 'w')file.write('在学python')file.close()# rb模式src_file = open('b.txt', 'rb')target_file = open('copyb.txt', 'wb')target_file.write(src_file.read())target_file.close()src_file.close()

结果输出:

Process finished with exit code 0

      

2.文件对象常用的方法:

方法名 描述
read([size])

从文件中读取size个字节或字符的内容返回。

若省略[size]参数,则读取到文件末尾,即一次读取文件所有内容

readline() 从文本文件中读取一行内容
readlines() 把文本文件中每一行都作为独立的字符串对象,并将这些对象放入到列表返回
write(str) 将字符串str内容写入文件
writelines(s_list) 将字符串列表s_list写入文本文件,不添加换行符
seek(offset [,whence])

把文件指针移动到新的位置,offset表示相对于whence的位置。

offset:为正,往文件结束方向移动,为负则往文件开始方向移动

whence:不同的值代表不同含义,0表示从文件头开始计算(默认值),1表示从当前位置开始计算,2表示从文件末尾开始计算

tell() 返回文件指针的当前位置
flush() 把缓冲区的内容写入文件,但不关闭文件
close() 把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源

代码示例:

file = open('c.txt', 'a+')print(file.read(2))lst = ['javascript', 'c']file.writelines(lst)file.seek(2)print(file.read())print(file.tell())file.write('hello')file.flush()file.write('world')file.close()

结果输出:

llojavac++goandpythonjavascriptchelloworldjavascriptc55

原始文件:

运行后结果:

(五)with语句

with语句可以自动管理上下文资源,不论什么原因跳出with语句块,都能确保文件正确关闭,同时释放资源。

语法格式:

open('log.txt', 'r')为上下文表达式[open()实现了__enter__()方法和__exit__()方法,遵守了上下文管理协议],对应示例对象被称为上下文管理器,同时创建一个运行时上下文,自动调用__enter__()方法,并将返回值赋值给src_file[可选,上下文管理器对象的引用],离开运行时上下文,程序将自动调用上下文管理器的特殊方法__exit__()。

with open('log.txt', 'r') as src_file:    src_file.read()  # with语句体

代码示例1:

class MyContentMgr:  # 实现了__enter__()方法和__exit__()方法,遵守了上下文管理协议    def __enter__(self):        print('enter方法被调用执行')        return self    def __exit__(self, exc_type, exc_val, exc_tb):        print('exit方法被调用执行')    def show(self):        print('show方法被调用执行', 1/0)  # 写入异常with MyContentMgr() as file:  # 相当于file = MyContentMgr()    file.show()

结果输出[存在异常,exit方法仍被执行]:

Traceback (most recent call last):    file.show()    print('show方法被调用执行', 1/0)  # 写入异常ZeroDivisionError: division by zeroenter方法被调用执行exit方法被调用执行

代码示例2:

print(type(open('b.txt', 'r')))with open('b.txt', 'r') as src_file:    print(src_file.read())

结果输出:

<class '_io.TextIOWrapper'>在学python小潭

(六)目录操作

os模块是python内置的与操作系统功能和文件系统相关的模块,该模块中的语句执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。

os模块与os.path模块用于对目录或文件进行操作。

代码格式:

import osos.system('notepad.exe')os.system('calc.exe')# 直接调用可执行文件os.startfile('C:\\Program Files\\Tencent\WeChat\WeChat.ext')

1.os模块操作目录相关的函数:

函数 描述
getcwd() 返回当前的工作目录
listdir(path) 返回指定路径下的文件和目录信息
mkdir(path [, mode]) 创建目录
makedirs(path1/path2...[, mode]) 创建多级目录
rmdir(path) 删除目录
removedirs(path1/path2...) 删除多级目录
chdir(path) 将path设置为当前工作目录

代码示例:

import os# 打印目录路径print(os.getcwd())# 创建目录os.mkdir('newdir')os.makedirs('A/B/C')# 列举目录内容lst = os.listdir('../cap15')print(lst)# 删除目录os.rmdir('newdir')os.removedirs('A/B/C')# 指定目录os.chdir('../')print(os.getcwd())

结果输出:

D:\Python\cap15['A', 'a.txt', 'b.txt', 'c.txt', 'copyb.txt', 'demo1.py', 'demo2.py', 'demo3.py', 'demo4.py', 'demo5.py', 'demo6.py', 'demo7.py', 'newdir']D:\Python

2.os.path模块操作目录相关函数:

补充,可使用os模块中的walk()函数获取整个目录结构。

函数 描述
abspath(path) 用于获取文件或目录的绝对路径
exists(path)

用于判断文件或目录是否存在,

如果存在返回True,否则返回False

join(path, name) 将目录与目录或文件拼接起来
splitext() 分离文件和扩展名
basename(path) 从一个目录中提取文件名
dirname(path) 从一个路径中提取文件路径,不包括文件名
isdir(path) 用于判断是否为路径

代码示例1:

import os.pathprint(os.path.abspath('demo8.py'))print(os.path.exists('demo1.py'), os.path.exists('demo9.py'))print(os.path.join('D:\\Python', 'demo8.py'))print(os.path.split('D:\\Python\\cap15\\demo8.py'))print(os.path.splitext('demo8.py'))print(os.path.basename('D:\\Python\\cap15\\demo8.py'))print(os.path.dirname('D:\\Python\\cap15\\demo8.py'))print(os.path.isdir('D:\\Python\\cap15\\demo8.py'))

结果输出:

D:\Python\cap15\demo8.pyTrue FalseD:\Python\demo8.py('D:\\Python\\cap15', 'demo8.py')('demo8', '.py')demo8.pyD:\Python\cap15False

代码示例2:

# 使用os.walk()分层级遍历目录import ospath = os.getcwd()lst_files = os.walk(path)for dirpath, dirname, filename in lst_files:    print(dirpath)    print(dirname)    print(filename)    print('----------------')    # 使用os.walk()分层级遍历目录并输出文件路径import ospath = os.getcwd()lst_files = os.walk(path)for dirpath, dirname, filename in lst_files:    for dir in dirname:        print(os.path.join(dirpath, dir))    for file in filename:        print(os.path.join(dirpath, file))    print('----------------')

结果输出:

# 使用os.walk()分层级遍历目录D:\Python\cap15['sub']['a.txt', 'b.txt', 'c.txt', 'copyb.txt', 'demo1.py', 'demo2.py', 'demo3.py', 'demo4.py', 'demo5.py', 'demo6.py', 'demo7.py', 'demo8.py', 'demo9.py']----------------D:\Python\cap15\sub['sub1']['1.py']----------------D:\Python\cap15\sub\sub1[]['sub_1.py']----------------# 使用os.walk()分层级遍历目录并输出文件路径D:\Python\cap15\subD:\Python\cap15\a.txtD:\Python\cap15\b.txtD:\Python\cap15\c.txtD:\Python\cap15\copyb.txtD:\Python\cap15\demo1.pyD:\Python\cap15\demo2.pyD:\Python\cap15\demo3.pyD:\Python\cap15\demo4.pyD:\Python\cap15\demo5.pyD:\Python\cap15\demo6.pyD:\Python\cap15\demo7.pyD:\Python\cap15\demo8.pyD:\Python\cap15\demo9.py----------------D:\Python\cap15\sub\sub1D:\Python\cap15\sub\1.py----------------D:\Python\cap15\sub\sub1\sub_1.py----------------

以上是python中编码格式和文件相关的操作知识。至此,我们已学习了全部的python基础部分,如果感觉掌握的还不是很牢固,可以返回01-写在之前,从开始再巩固一遍哦。

在接下来的推文中,我们将陆续进入python基础实战部分的学习,使用已学到的python基础知识进行一些小项目的开发,敬请期待。

下期预告:python基础实战——简易版学生信息管理系统

py文件输出结果_24python中编码格式和文件操作相关推荐

  1. vmware虚拟机上的centos安装Hadoop,以及在本地eclipse上运行mapReduce项目,并将文件输出到HDFS中...

    注意centos主机名不支持下划线,所以文章中若出现centos_02.com,请替换为 centos02.com vmware虚拟机上的centos安装Hadoop 安装vmware虚拟机 虚拟机上 ...

  2. maven没有resource文件夹_maven项目中没有resource文件夹的问题

    之前使用eclipse创建maven项目,文件夹都是建好的,这几次创建,都没有resource文件夹,需要手动创建resource. 现象描述 在eclipse中,创建maven项目有两种方式: 一种 ...

  3. wp文件转shp_完美实现从mapGIS文件转换成ArcGIS中shp格式文件

    完美实现从 mapGIS 文件转换成 ArcGIS 中 shp 格式文件 最近经苦战实验,终于找到如何完美实现从 mapGIS 文件转换成 ArcGIS 中 shp 格式文件.步骤如下(各步骤中细节操 ...

  4. java中 exe是什么文件_从文件位置运行Java中的.exe文件

    从文件位置运行Java中的.exe文件 我必须从我的Java程序打开一个.exe文件. 所以我试着下面的代码第一. Process process = runtime.exec("c:\\p ...

  5. linux中文件输出输入,linux中文件输入输出的管理

    一..输入输出的定义 1,输入:输入是指我们的键盘,鼠标等硬件在系统中录入的字符 2,输出:输出是指系统在接受到我们想要实现的功能字符后,经过进程的处理产生的字符, 输出会有两种出现,编号1为正确输出 ...

  6. java读取系统中指定的文件_java读取jar中指定的文件

    Java 档案 (Java Archive, JAR) 文件是基于 Java 技术的打包方案.它们允许开发人员把所有相关的内容 (.class.图片.声音和支持文件等) 打包到一个单一的文件中.JAR ...

  7. 打开服务器数据库文件,如何打开服务器中的数据库文件

    如何打开服务器中的数据库文件 内容精选 换一换 云服务器新增磁盘,开机自动执行磁盘初始化脚本后,Oralce.MySQL和SQL Server等数据库系统日志Msg 823错误 .磁盘初始化脚本Win ...

  8. python 检查文件是否存在_Python中如何判断文件是否存在?

    这里介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try语句.pathlib模块. 1.使用os模块 os模块中的os.path.exists()方法用于检验文件是否存在. import ...

  9. matlab分析xml文件_修改Java中的XML文件(DOM分析器)

    matlab分析xml文件 We can modify XML file in Java using DOM parser. We can add elements, remove elements, ...

最新文章

  1. springmvc教程--RESTful支持详解
  2. 当前记录集不支持更新_微信现已正式支持修改微信号!微信7.0.16内测版更新(附下载)...
  3. linux5支持32,Red Hat发布RHEL5.3 可支持32颗虚拟CPU
  4. FFMPEG结构体分析:AVCodecContext(转)
  5. javaScript学习之路(1)词法结构
  6. python 循环赋值_Python打牢基础,从19个语法开始!
  7. 【FZU - 2140 】Forever 0.5 (计算几何,构造)
  8. Number.parseInt(), Number.parseFloat()
  9. 动态加载so库的实现方法与问题处理
  10. 高并发编程系列:深入探讨ConcurrentHashMap
  11. vscode :常用快捷操作
  12. linux多线程如何分配到多核上,Linux多线程编程 多核编程
  13. opencv ffmpeg推流
  14. 联想电脑(xx%电量可用已连接适配器,未充电)解决方法
  15. grafana设置邮件监控报警
  16. 数据分析——帆软report
  17. Qt 编程指南 8 显示静态小图片和动态大图片
  18. 大三软件测试实习生面试经验-1
  19. find、文件后缀及linux与Windows互传
  20. 想把图像文件转换为DWG文件?光栅矢量化工具了解一下

热门文章

  1. IBM并购网络视频会议商WebDialogs 加入Lotus Sametime
  2. 我同事今天被裁了,但我却涨了1万工资!
  3. 一个程序员的日常,简直太欢乐了!
  4. 服务器响应401,服务器返回HTTP响应代码:401,URL:https
  5. 旋转校正原理_「牛车实验室」四轮定位和动平衡如何选择?趣谈两种项目的原理和区别...
  6. apicloud模块和html,APICloud教程
  7. 十分钟搞定pandas+实战
  8. 10000个科学难题书籍介绍
  9. 【C#桌面应用】第二节:利用Visual Studio2019 创建桌面应用
  10. python gifmaze_Windows平台python验证码识别