一、文件外部操作
本节主要介绍Python的os模块对文件夹和文件等的操作,例如创建、删除、重命名文件,获取文件路径、文件名、文件扩展名等。
不涉及对文件内容进行操作。
1 #Author:Azrael 2 # _*_ coding:utf-8 _*_ 3 import os 4 import shutil 5 print(os.getcwd())#打印当前文件所在路径 6 print(os.listdir('D:Python代码'))#列出该路径下所有的文件和文件夹 7 os.remove(r'C:UsersAdministratorDesktop est.txt')#删除指定文件 8 os.removedirs(r'C:UsersAdministratorDesktop est')#删除指定目录 9 print(os.path.isfile(r'C:UsersAdministratorDesktop est.txt'))#判断指定是否为文件 10 print(os.path.isdir(r'C:UsersAdministratorDesktop est'))#判断指定是否为文件夹 11 print(os.path.isabs(r'C:UsersAdministratorDesktop est'))#判断是否为绝对路径 12 print(os.path.exists(r'C:UsersAdministratorDesktop est'))#判断指定文件夹是否存在 13 print(os.path.split(r'C:UsersAdministratorDesktop est'))#把路径分割为目录名和文件名 14 print(os.path.splitext(r'C:UsersAdministratorDesktop est.txt'))#把路径分割为路径名和文件扩展名 15 print(os.path.dirname(r'C:UsersAdministratorDesktop est.txt'))#获取文件路径 16 print(os.path.basename(r'C:UsersAdministratorDesktop est.txt'))#获取文件名 17 os.system('ipconfig')#获取本机网络信息 18 os.putenv("test","eee")#设置一个环境变量,临时的 19 print(os.getenv("test")) #获取一个环境变量,如果没有返回none 20 os.linesep#返回当前平台的行终止符 21 os.rename(r'C:UsersAdministratorDesktop est1.txt', r'C:UsersAdministratorDesktop est.txt')#重命名 22 os.makedirs(r'C:UsersAdministratorDesktop est1 est1')#创建目录,相当于mkdir -p 23 os.mkdir(r'C:UsersAdministratorDesktop est1')#创建目录 24 print(os.stat(r'C:UsersAdministratorDesktop est1'))#获取指定文件的属主、组、大小、atime等信息 25 #os.chmod(r'C:UsersAdministratorDesktop est1') #windows下不能这样使用 26 os._exit('进程号')#退出指定进程号的进程 27 print(os.path.getsize(r'C:UsersAdministratorDesktop est.txt'))#获取文件大小 28 os.mknod(r'C:UsersAdministratorDesktop est.txt') #windows无法使用;创建文件test.txt 29 30 os.mkdir(r'C:UsersAdministratorDesktop est') #创建文件夹 31 open(r'C:UsersAdministratorDesktop est.txt','w') #创建文件 32 shutil.copyfile(r'C:UsersAdministratorDesktop est.txt',r'C:UsersAdministratorDesktop est1.txt') 33 #复制test.txt并命名为test1.txt,test1.txt存在与否无关系 34 shutil.copy(r'C:UsersAdministratorDesktop est.txt',r'C:UsersAdministratorDesktop est1.txt') 35 #复制test.txt并命名为test1.txt,test1.txt存在与否无关系 36 shutil.copytree(r'C:UsersAdministratorDesktop est',r'C:UsersAdministratorDesktop est1') 37 #将文件夹test复制成并命名为test1,test1不能已经存在 38 os.rename(r'C:UsersAdministratorDesktop est',r'C:UsersAdministratorDesktop est1') 39 #将test重命名为test1.文件和文件夹都适用 40 shutil.move(r'C:UsersAdministratorDesktop est.txt',r'C:UsersAdministratorDesktop est1 est.txt') 41 #将桌面的test.txt移动到桌面的test1文件夹下面 42 os.remove(r'C:UsersAdministratorDesktop est1 est.txt') #删除文件 43 os.rmdir(r'C:UsersAdministratorDesktop est1') #删除空目录 44 shutil.rmtree(r'C:UsersAdministratorDesktop est1') #删除目录 45 print(os.getcwd()) #打印当前所在的路径 46 os.chdir(r'C:UsersAdministratorDesktop est1') #切换路径 47 print(os.getcwd()) #打印当前所在的路径
二、文件内容操作
1、打开文件模式
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
2、语法介绍
1 #Author:Azrael 2 f=open("test",encoding="utf-8")#打开指定文件,默认为只读模式 3 print(f.readline())#打印文件一行内容,但是文件所有内容已经加载内存 4 print(f.readlines())#从光标所在地起打印文件所有内容,生成一个列表,以一行为一个元素 5 print(f.read())#从光标所在地起打印文件所有内容 6 f.close()#关闭文件 7 f.write("bbbbbbb")#将字符串bbbbbbb写入文件 8 print(f.readable())#判断当前打开文件方式是否可读 9 f.seek(50)#将光标移动到指定位置 10 print(f.tell())#返回当前光标所在位置 11 print(f.writable())#判断当前打开文件方式是否可写 12 f.truncate(5)#截取文件指定字符长度,只有在可写情况才能执行 13 print(f.seekable())#判断文件光标是否可操作 14 with open("test",encoding="utf-8") as f: #上下文管理,避免忘记关闭打开文件 15 print(f.readline())
三、练习
1、题目要求
1 查找: 2 3 用户输入:如果你不曾心碎你不会懂得我伤悲 4 5 返回结果:结果显示此句后所有内容 6 7 增加: 8 9 用户输入:谁在乎我的心里有多苦 10 11 谁在意我的明天去何处 12 13 返回结果:文件中增加用户输入内容 14 15 删除: 16 17 用户输入:谁在乎我的心里有多苦 18 19 谁在意我的明天去何处 20 21 返回结果:文件中增加用户输入内容
2、题目元素
1 歌手:刘德华 专辑:忘情水 2 曲:陈耀川词:李安修 3 曾经年少爱追梦一心只想往前飞 4 行遍千山和万水一路走来不能回 5 蓦然回首情已远身不由已在天边 6 才明白爱恨情仇最伤最痛是后悔 7 如果你不曾心碎你不会懂得我伤悲 8 当我眼中有泪别问我是为谁 9 就让我忘了这一切 10 啊给我一杯忘情水换我一夜不流泪 11 所有真心真意任它雨打风吹 12 付出的爱收不回 13 给我一杯忘情水换我一生不伤悲 14 就算我会喝醉就算我会心碎 15 不会看见我流泪
3、参考答案
1 #Author:Azrael 2 import os 3 #查找 4 f=open("test",'r+',encoding="utf-8") 5 with open("test",encoding="utf-8") as f: 6 select_info=input("麻烦您输入查询标志:") 7 for line in f : 8 if select_info in line: 9 print(f.read()) 10 #插入 11 with open("test",'a', encoding="utf-8") as f: 12 insert_info=input("麻烦您输入想增加的内容:") 13 list=insert_info.split(",") 14 for info in list: 15 f.write(info+" ") 16 #删除 17 with open("test",'r+',encoding="utf-8") as f, 18 open("test1",'a',encoding="utf-8") as f_new: 19 delete_info=input("麻烦您输入想删除的内容:") 20 delete_list=delete_info.split(",") 21 for line in f: 22 if line.strip() in delete_list: 23 print(line) 24 else: 25 f_new.writelines(line) 26 27 os.replace("test1","test")