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

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

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

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

(一)编码格式介绍

    常见的字符编码格式

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

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

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

ad4835da4783e6c6d430c7c5ad9275c3.png

(二)文件的读写原理

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

a830e6f85c01838bb271e44380ebcae9.png

(三)文件读写操作

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

adbba5af4b186567c95df4906e40b88c.png

  • 语法规则

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

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

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

bc7b179ef6c8102c590a99bda8681b7e.png               0f8229eb369ae3498e3395f9081a455f.png

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

1a86770c6fdd2781f9f13ad7ab10b97b.png      01ae509f5818958d241a62022d67f40a.png

531c00a274b8ab838d937c1f9371ee2d.png1011188d7a0ba61d8f844e6c99c256d1.png

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

原始文件:

e72604b4fd95a75cd5f5a267e9c6735e.png

运行后结果:

b9c93209354ea0aae554a9c54fc0aaca.png

(五)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基础实战——简易版学生信息管理系统

a1d3c68e464bbbf5eac4db4f3f8ac898.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值