大家好,我是JieJie编程路上一个人可能走的更快,但一群人才能走得更远,关注JieJie一起学习不迷路今天分享的是 python中与文件、目录有关的操作, 以及编码格式相关的知识 ,话不多说,秃头走起,下面我们就来聊聊关于python创建文件并指定编码?接下来我们就一起去了解一下吧!

python创建文件并指定编码(Python第八篇编码格式)

python创建文件并指定编码

前言

大家好,我是JieJie!编程路上一个人可能走的更快,但一群人才能走得更远,关注JieJie一起学习不迷路!今天分享的是 python中与文件、目录有关的操作, 以及编码格式相关的知识 ,话不多说,秃头走起

一、文件及目录操作

1.编码格式介绍

大部分情况下我们学习编码格式都是为了解决中文乱码的问题。

常见的字符编码格式:

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

.py文件在磁盘上默认使用UTF-8存储(外存),可通过记事本打开文件,然后另存为就能看到了

在程序前加**#encoding=gbk**,我们就能更改编码为ANSI,不同的编码格式文件的大小是不一样的。

2.文件的读写原理

文件的读写俗称"IO操作"(input/output);IO的原理为队列,先进先出,先读入的数据流先写出。

从外到内存为读,从内存到外为写。

读写操作流程:

操作原理:

.py文件通过解释器向操作系统发出申请,操作系统读写磁盘上的文件。

3.文件读写操作

通过IO流将磁盘文件中的内容与程序中的对象的内容进行同步。

使用内置函数open()创建文件对象语法:

这里要注意.txt文件的编码格式默认为gbk,.如果文本的编码格式不是GBK应该改一下;

4.常用的文件打开模式

文件的类型

按照文件中数据的组织形式,文件分为:

文本文件:

存储的是普通的字符文本,默认为unicode字符集,可以使用记事本打开;

二进制文件:

把数据内容用字节进行存储,无法用记事本打开,必须使用专门的软件,一般来说,音频、图片都是二进制文件。

打开模式

打开模式

说明

r

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

w

以只写模式打开文件,如果文件不存在则创建,文件指针在文件开头;如果文件存在,则覆盖原有内容,文件指针在文件的开头

a

以追加模式打开,如果文件不存在则创建,文件指针在文件开头;如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾。

b

以二进制方式打开,不能单独使用,需要与其他模式一起使用,rb/wb

以读写方式打开,不能单独使用,需要与其他模式一起使用,如a

file=open('a.txt','r') #打开文件,r为只读模式? print(file.readlines()) #将文件中内容输出在列表中 file.close() #关闭资源 file=open('a.txt','w') file.write('永远的神') file.close() file=open('a.txt','a') file.write('永远的神') file.close() file=open('a.txt','a') file.write('永远的神') file.close()

我们用二进制的方式读取一张照片并写在另一个.png文件里(即复制照片)

5.文件对象常用的方法

注意:文件中写入数据的时候,python并不会立刻写入,而是会写到缓冲区,等待清空的时候写入,用flush可以将缓存区内容写入文件并清空缓存,从而达到不用close文件就能写入文件。清空之后无论使用多少次write都会在文件末尾写入而不是重新覆盖。 close之后不能再写内容,flush可以。

6.with语句(上下文管理器)(***)

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

with open('a.txt','r') as file: print(file.read())

这样写,我们就不用手动close文件了。下面来看看具体的语法:

什么是上下文管理器?

一个类对象,如果实现了__enter__()和__exit__()方法,称此类对象遵守上下文管理协议,而类对象的实例对象称为上下文管理器。

这里的open是一个类,那么open括号里的内容就是一个上下文管理器。

#with语句实现图片的复制 with open ('photo.png','rb') as src_file: with open ('copyphoto.png','wb') as target_file: target_file.write(src_file.read())

7.目录操作

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

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

对操作系统功能进行操作:

import os #os.system('notepad.exe') #打开记事本 #os.system('calc.exe') #打开计算器 #直接调用可执行文件 os.startfile('C:\\Program Files (x86)\\Tencent\\QQ\\Bin\\qq.exe') #打开QQ

对文件目录进行操作

os模块的使用

import os print(os.getcwd()) #输出当前工作目录 lst=os.listdir('demom.py') #(./文件名)表示回退两个目录 print(lst) os.mkdir('newdir1') #创建目录 os.makedirs('a/b/c') #创建多级目录 os.rmdir('newdir1') #删除目录 os.removedirs('a/b/c') #删除多级目录 os.chdir('C:\\Users\\27101\\Desktop\\demom.py') #将目录设置为当前工作目录 print(os.getcwd())

os.path模块的使用

import os.path print(os.path.abspath('demo2.py')) #显示文件的绝对路径 print(os.path.exists('demo2.py'),os.path.exists('demo22222.py')) #文件是否存在 print(os.path.join('D:\\cs','demo2.py')) #拼接路径 print(os.path.split('C:\\Users\\27101\\Desktop\\demom.py')) #将路径与文件名分开 print(os.path.splitext('demo2.py')) #将文件名与扩展名分开 print(os.path.basename('C:\\Users\\27101\\Desktop\\demom.py')) #提取文件名 print(os.path.dirname('C:\\Users\\27101\\Desktop\\demom.py')) #提取路径 print(os.path.isdir('C:\\Users\\27101\\Desktop\\demom.py\\demo2.py')) #结果是否为目录,demo2为一个文件

结果如下:

最后以两个例子结尾:①输出指定目录下的所有.py文件

#输出指定目录下的所有.py文件 import os path=os.getcwd() lst=os.listdir(path) for filename in lst: if filename.endswith('.py'): #以.py结尾的 print(filename)

通常在办公自动化等的时候需要对excel等文件进行批量处理时会用到这种目录操作。

②递归遍历一个文件夹中所有的目录

#遍历一个文件夹下所有的文件及目录 import os path=os.getcwd() lst_file=os.walk(path) #walk()方法获得目录下所有文件,返回元组 for dirpath,dirname,filename in lst_file: print(dirpath) print(dirname) print(filename) print('________________________') for dir in dirname: print(os.path.join(dirpath,dir)) #将路径与目录连接 print('----------------------------------------------') for file in filename: print(os.path.join(dirpath,file)) #将路径与文件名连接

总结

今日分享到此结束,由于笔者还在求学之路上辗转徘徊,水平有限,文章中可能有不对之处,还请各位大佬指正,祝愿每一个热爱编程的人都能实现追求,考研上岸进大厂,熬夜秃头卷中王。