python文件操作入门

文件操作入门

单个文件读写:

下面这首诗存在一个txt文件里,文件路径为: “D:\文件集散地\白雪歌送武判官归京.txt” 。请将这首诗的前5句存到另一个txt文件里。

北风卷地白草折,胡天八月即飞雪。
忽如一夜春风来,千树万树梨花开。
散入珠帘湿罗幕,狐裘不暖锦衾薄。
将军角弓不得控,都护铁衣冷难着。
瀚海阑干百丈冰,愁云惨淡万里凝。
中军置酒饮归客,胡琴琵琶与羌笛。
纷纷暮雪下辕门,风掣红旗冻不翻。
轮台东门送君去,去时雪满天山路。
山回路转不见君,雪上空留马行处。
file1= open("D:\文件集散地\白雪歌送武判官归京.txt","r",encoding='utf-8')
#open("路径","打开方式",encoding='utf-8'指定编码格式,不然可能报错)
file2= open("D:\文件集散地\新建.txt","w")

for i in range(2):
    line= file1.readline() #读一行
    file2.write(line) #写入

file2.write(file1.read(8))

file2.flush() #把缓冲区的内容强行写入硬盘并清空缓冲区,用在close()之前,防止文件关闭的时候数据还没写完
file2.close()
file1.close()

基本读写操作

    • _.write("你想写的东西") #写入一行,并换行
      _.writelines("你想写的东西") #把字符串原封不动写入,不会做任何其它操作
      
    • 不能写入列表,只能写入字符串
    • _.read(size) #读size个字符,若不加size,默认读取整篇全读,不换行
      _.readline() #读一行,返回列表[read(1),read(1),...]
      _.readlines() #整篇全读,返回列表[readline(),readline(),...]
      

上面有用到os模块吗?

没有,这些都是Python自带的

除了"r"和"w"还有多少种打开方式?

  • 打开方式(只读/只写/又读又写)(句柄在开头/末尾)(覆盖式写/追加式写)(文件不存在则新建/报错)(二进制式)
    • a+ 任何模式多个"+"都是又读又写,
    • r+ 读写,开头,报错,覆盖
    • wb 任何模式多个"b"都是二进制式读取
    • w 只写,开头,新建,覆盖
    • a 末尾,新建,追加。PS:每次写入,句柄都会自动移回末尾

音乐、图片能用这种方式读写吗?

不能,要先以二进制的方式打开

mediaFile= open("路径","rb")

并且:TypeError: write() argument must be str, not bytes。所以:

New_mediaFile= open("路径","wb")

close()很容易忘记写,有没有能不写close的方法?

with open("D:\文件集散地\新建.txt","w") as file2:
    for i in range(2):
        line= file1.readline()
        file2.write(line)
    file2.write(file1.read(8))
    file2.flush() 

我觉得“忽如一夜春风来”这句诗太nice了,想再写一遍,但是句柄回不去,怎么办?

  • file.seek()调整句柄
    • file.seek(移几个字符,从哪开始) #从哪开始: 0从开头(默认);1从当前位置;2从末尾-倒数
      

但!是! seek只有在 “rb” 二进制模式下才能来去自如地跳格,在非二进制的模式下只能从开头开始计算位置,而在utf-8模式下找不到开头所以根本用不了。

所以,抱歉,回不去了。

文件目录操作: 新建 / 拷贝 / 移动 / 删除 , 文件 / 文件夹

有文件夹目录如下:

  • D:\文件集散地\data
    • aaa
      • 111文件夹
      • 222文件夹
      • 隐藏 .txt
    • bbb

请将aaa文件夹原封不动移动到bbb文件夹下。同时,aaa文件夹中有一个txt文件,文件名未知,把该文件,拷贝到 bbb/111文件夹 下

import os
import shutil
file_in_aaa= os.listdir(r"D:\文件集散地\data\aaa")
for file in file_in_aaa :
    if(os.path.splitext(file)[1]==".txt"): #返回的扩展名是有"."的
        print(file)
        shutil.copy(r"D:\文件集散地\data\aaa"+"\\"+file,r"D:\文件集散地\data\bbb")

shutil.move(r"D:\文件集散地\data\aaa",r"D:\文件集散地\data\bbb")

基本操作

  • 新建文件夹(如果文件夹已存在?如果文件夹所属路径不存在?)

    • os.makedirs(r"D:\data") #文件夹已存在:报错;文件夹所属路径不存在:新建
      os.mkdir(r'D:\23333333333\222')  #文件夹已存在:报错;文件夹所属路径不存在:报错
      
  • 拷贝

    • 文件:
      • shutil.copyfile("旧","新,精准到文件名")  #只能拷贝文件
        shutil.copy("旧","新,精准到文件夹,文件名可要可不要")  #只能拷贝文件
        
      • 如果文件已存在:覆盖; 如果路径不存在:报错;如果两个路径是同一个:报错;
    • 文件夹:
      • shutil.copytree(r"D:\data",r"D:\data\test")
        #把data文件夹拷贝到data下,并重命名为test
        
      • 如果文件夹已存在:报错;如果路径不存在:新建;如果两个路径是同一个:相当于文件夹已存在;
      • shutil.copytree(r"D:\data",r"D:\data\test\自我复制的死循环") 
        # shutil.copytree(r"D:\data",r"D:\data\test") #为什么这样不会报错,加一层就会报错?树的先序遍历
        # 只要避免那个目标文件夹被压进栈里,就不会死循环
        
  • 移动:

    • shutil.move("旧","新")
      
    • 如果路径不存在:新建-只针对文件夹的移动;如果两个路径是同一个:重命名,资源管理器甚至会实时刷新;
      • !!!如果你想把一个文件移到一个不存在的文件夹里,就会出错,但是不会报错。
    • “新”-这个目标路径可以有两个含义,一个是新建文件夹,一个是把文件夹迁移到这个目录底下。程序运行时取的是哪个含义,取决于这个路径存不存在。
    • 如果迁移到的目录下有同名文件,就会报错
  • 删除:

    • os.remove("路径") #文件
      shutil.rmtree("路径") #文件夹
      
    • 如果路径不存在:报错
    • OS模块里也有能够移除文件夹的函数,但是只能移除空文件夹

问题时间 |

目标路径不存在时会报错的是哪几个函数?

shutil.mkdir()
shutil.rmtree()
os.remove()
shutil.move("文件","不存在的路径")

哪几个函数是OS模块里的?

os.mkdir()
os.makedirs()

唯一一个会覆盖同名文件而不会报错的函数是哪一个?

shutil.copy()
shutil.copyfile()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白草遥遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值