python知识点7

 知识点7 --- 文件跟目录


文件:后面有.扩展名的才是文件


注意:文件夹为目录 


常见文件格式:Outlook是邮件 
              DLL用来做配置的
              ISO镜像文件


概念:存储在某种长期设备上的一段数据流


作用:把一些存储起来,可以让下次执行时可以直接使用,省时省力


一 文件的操作


1 ,打开一个文件/创建一个新文件的操作


2,读/写 数据


3, 关闭文件


硬盘里存的是二进制数据  


编码encode  -----   文本的是英文 ascii码 -----   解码 decode


                   文本: 欧洲,亚洲,汉字,unicode可表示所有字符
                   文本:通用编码 utf-8   utf-16


ord转换为ascii码
chr转换为字符


1  打开文件


open(file[,mode][,encoding][,errors]
  
  1.1  file不能省略,用来指定文件路径,即为需要打开的文件名


  1.2   modo 模式


         r:          表示以只读(字符)的方式打开文件,如果打开的文件不存在,则会出现异常,如果文件存在会打开文件,文件定位符放在起始位置


         rb:read byte表示以只读二进制方式打开文件,如果打开的文件不存在,则会出现异常,如果文件存在会打开文件
不存在
抛异常   r+          表示以读写的方式打开文件,如果打开的文件不存在,则会出现异常,如果文件存在会打开文件


         rb+         表示以读写二进制的方式打开文件,如果打开的文件不存在,则会出现异常,如果文件存在会打开文件




 从头写  w            表示以只写(字符)的方式打开文件,如果打开的文件不存在,则会创建新的文件
                      打开的时候会擦出掉原有数据,从开始位置开始写
                      文件的定位符放在起始位置
 不存在  wb           表示以只写二进制方式打开文件,如果打开的文件不存在,则会创建新的文件,打开的时候会擦出掉原有数据,
不抛异常
会擦出   w+           表示以读写的方式打开文件,如果打开的文件不存在,则会创建新的文件,打开的时候会擦出掉原有数据,


         wb+          表示以读写二进制的方式打开文件,如果打开的文件不存在,则会创建新的文件,打开的时候会擦出掉原有数据,




 append  a            表示以只写(字符)的方式打开文件,如果打开的文件不存在,则会创建新的文件,如果存在,不会擦出原有数据
                      打开的时候不会擦出掉原有数据,从文件原有的末尾开始写
                       文件的定位符(光标)放在末尾后面从定位符位置开始写 


         ab           表示以只写二进制方式打开文件,如果打开的文件不存在,则会创建新的文件,如果存在,不会擦出原有数据
后面写
不存在   a+           表示以读写的方式打开文件,如果打开的文件不存在,则会创建新的文件,如果存在,不会擦出原有数据
不抛异常
不会擦除
         ab+          表示以读写二进制的方式打开文件,如果打开的文件不存在,则会创建新的文件,如果存在,不会擦出原有数据
 
        


  1.3   enconding 编码-------utf-8 ,   gbk国标


  1.4   errors  参数ignore   忽略部分参数错误


open(file,mode="r")




默认是gbk解码方式


rf = open("情书.txt",enconding="UTF-8",)


content = rf.read.()


rf = close.()






格式1:
try:
    open("情书.2txt","r",encoding="UTF-8",errors="ignorn")
    content = rf.read()
    print(content)
except:
    print("出现异常")
finally:
    if rf != None:
        rf.close()










格式2:
#使用with...as语法打开文件,可以不用close,会自定执行close,但不会处理异常
with open("情书2.txt","r"encoding="UTF-8",errors="ignore") as rf:
    rf.read






文件路径:


相对目录,在同一个目录下面


rf = open("情书.txt","r",encoding="UTF-8")




绝对目录----完整的路径(带盘符的)


pathFile = r"C:\Users\wenyucheng\Desktop\资料2\循环练习.py"
rf = open("pathFile","r",encoding="UTF-8")




content = rf.read()
print(content)


rf.close()










3  读的操作


rf = open("情书.txt","r",encoding="UTF-8")


#默认读取所有内容


#content= rf.read()


#read中有参数表述读取多少个字符


#content1 = rf.read(10) 从起始位置开始读


#content2 = rf.read(10)  继续读取操作时,是接着上一次读的位置继续读




print(content1)        
print(content2)






一行一行的读
content = rf.readline() 表示读第一行
content = rf.readline() 表示读下一行






读取所有行   跟默认读取全部内容不同


content = rf.readlines()  结果为列表
遍历可以取出每行内容


print(content)


读取二进制数据


rbf = open("情书.txt","rb")
content = rbf.read()


rbf.write()
如何复制文件


表示的参数为读取二进制数据的长度,单位byte


一个英文字符占一个字节,在UTF-8中,一个中文占三个字节
                         gdk     一个中文占两个字节


content= rf.read(8)  从1-4可以读取,从5-7不可以读取


print(content)


将二进制数据解码转换为字符串


print(content.decode(encoding="UTF-8"))


rbf.close()




打开
#wf = open("情书2.txt","w",encoding="UTF-8")


wf = open("情书2.txt","wb")


w会先擦除掉原有数据


写入一个


wf.write("对不起,你是一个好人")
wf.write("对不起,你是一个好人".encode(encoding="UTF-8"))






wf.close()




打开
af = open("情书2.txt","a",encoding="UTF-8")  


af.read 不可读


af = open("情书2.txt","a+",encoding="UTF-8") 
af.read 表示可读


写入一个,追加,默认是写在末尾   写的操作一个是write,一个是记得flush


af.write("\n对不起,你是一个好人")  #\n表示换行
af.write("\n我最爱的人是小灰灰")
af.close




直接把内部缓存区的数据立刻写入文件,不需要被动等待缓冲区刷新写入
af.flush()




复制文件:
  """复制文件:


0.先获取原文件的文件名


1,先创建一个(写的方式打开)副本文件


2.读取源文件的内容


3.将源文件的内容写入副本文件


4.关闭源文件副本文件




"""
fileName = input("请输入你要复制的文件名:")


#情书.txt ---> 情书-副本.txt


#从右边找到.的位置
index = fileName.rfind(".")


#拼接副本文件名
copyFileName = fileName[:index] + "副本" + fileName[index:]
print(copyFileName)


copyFile = open(copyFileName,"w",encoding="UTF-8")
sourceFile= open(fileName,"r",encoding = "UTF-8")


content = sourceFile.read()
copyFile.write(content)
copyFile.flush()


copyFile.close()
sourceFile.close()
















复制pdf格式




fileName = input("请输入你要复制的文件名:")
#情书.txt ---> 情书-副本.txt
#从右边找到.的位置
index = fileName.rfind(".")
#拼接副本文件名
copyFileName = fileName[:index] + "副本" + fileName[index:]
print(copyFileName)


copyFile = open(copyFileName,"wb")以二进制方式来操作即可复制pdf格式
sourceFile= open(FieName,"rb")


content = sourceFile.read()   如果是视频,读取的时候内存太大
copyFile.write(content)
copyFile.Flush()


copyFile.close()
sourceFile.close()




复制大文件


在打开的操作之后才进行循环写入的这个部分


while True:
        
        #读取1M
content = sourceFile.read(1024)   #1024byte=1kb


        if len(content) == 0:             #代表写完了
        break
        copyFile.write(content)
        copyFile.flush()













06  文件的定位读写


rf=open("情书.txt","r",encoding="utf-8")


#rf=open("情书.txt","rb")  二进制的时候read后数字跟得到字节数一致
content = rf.read(7)


获取当前的字节位置


index = rf.tell()


print("index=%d"%(index))


print(content)
rf.close()




跳到某个位置,单位是字节


两个参数


rf=open("情书.txt","rb")
content = rf.read(5)


offset:
shence:0 表示参考起始位置的偏移量
       1 表示参考当前位置的偏移量
       2 表示参考结尾的偏移量     


里面只有一个参数时,表示起始位置的偏移量
rf.seek(10,1)
rf.seek(-2,1)
rf.seek(10,2)   index=182




二  目录的操作


os代表的是系统,os模块包含了系统普遍的一些功能




import os 


增删改查


查:获取当前目录的相对路径


print(os.curdir)    获取得到. 


 用.来表示当前路径


 用..表示的是父集目录  上一级目录
 
   
rf = open(r".\test\新闻.txt",encoding="utf-8")
print(rf.read())
rf.close()






rf = open(r"..\test\情书.txt",encoding="utf-8")
print(rf.read())
rf.close()




   获取当前的工作路径
print(os.getcwd(),"文件名")


  获取目录下所有的文件名 和 目录名 (绝对目录) 


  将所有的目录和文件名封装成一个列表


listFileName = os.listdir(r"路径名")
print(listFileName)










增:


创建一个新的目录 make简写mk
如果创建的文件已经存在,会报异常


os.mkdir(r"I:\sz1704\day08\news") 绝对路径




os.mkdir(r"news")                
 相对路径,创建的是平级的


os.mkdir(r"news")  名字一样会报异常
os.mkdir(r"news.txt") 创建的还是目录


创建文件:


    open  里传w




mkdir创建目录时,如果新目录的父级目录不存在,会报异常




例子:先删除news目录
os.mkdir(r"I:\sz1704\day08\news\hello") 则报错




makedirs创建目录时,如果新目录的父级目录不存在,会一起创建
os.makedirs(r"I:\sz1704\day08\news\hello")










改:    os.rename("","")   os.rename(r"",r"")


重命名,改的是相对目录


可以修改文件名


参数1表示原文件名,参数2表示新的文件名


如果原文件名对应的文件不存在,会报异常


os.rename("情书3.txt","情书终结版.txt")


修改目录名


os.rename("news.txt","新闻")




修改绝对路径的文件名


os.rename(r"I:\sz1704\day08\news\hello",r"I:\sz1704\day08\news\word")












删:


删除相对目录 空的才可以删除  os.rmdir()


os.rmdir("新闻")


删除绝对目录  空的才可以删除


os.rmdir(r"I:\sz1704\day08\news\word")






删除文件    os.remove()


os.remove("情书2.txt")


os.remove(r"I:\sz1704\day08\news")








shell 命令


os.system("notepad")
os.system("write")
os.system("mspaint")
os.system("msconfig")
os.system("shuedown-s-t 500")
os.system("shuedown-a")
os.system("taskkill/f/im notepad.exe")


















     
      write
      









































猜你喜欢

转载自blog.csdn.net/jiangwei1102/article/details/79055587