大家好,我是JieJie编程路上一个人可能走的更快,但一群人才能走得更远,关注JieJie一起学习不迷路今天分享的是 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)) #将路径与文件名连接
今日分享到此结束,由于笔者还在求学之路上辗转徘徊,水平有限,文章中可能有不对之处,还请各位大佬指正,祝愿每一个热爱编程的人都能实现追求,考研上岸进大厂,熬夜秃头卷中王。