栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python文件操作的三个步骤_python文件操作方法有哪些?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python文件操作的三个步骤_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:文件集散地dataaaa")
for file in file_in_aaa :
    if(os.path.splitext(file)[1]==".txt"): #返回的扩展名是有"."的
        print(file)
        shutil.copy(r"D:文件集散地dataaaa"+"\"+file,r"D:文件集散地databbb")

shutil.move(r"D:文件集散地dataaaa",r"D:文件集散地databbb")
基本操作

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

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

拷贝

文件:

shutil.copyfile("旧","新,精准到文件名")  #只能拷贝文件
shutil.copy("旧","新,精准到文件夹,文件名可要可不要")  #只能拷贝文件
如果文件已存在:覆盖; 如果路径不存在:报错;如果两个路径是同一个:报错; 文件夹:

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

移动:

shutil.move("旧","新")
如果路径不存在:新建-只针对文件夹的移动;如果两个路径是同一个:重命名,资源管理器甚至会实时刷新;

!!!如果你想把一个文件移到一个不存在的文件夹里,就会出错,但是不会报错。 “新”-这个目标路径可以有两个含义,一个是新建文件夹,一个是把文件夹迁移到这个目录底下。程序运行时取的是哪个含义,取决于这个路径存不存在。如果迁移到的目录下有同名文件,就会报错

删除:

os.remove("路径") #文件
shutil.rmtree("路径") #文件夹
如果路径不存在:报错OS模块里也有能够移除文件夹的函数,但是只能移除空文件夹 问题时间 | 目标路径不存在时会报错的是哪几个函数?
shutil.mkdir()
shutil.rmtree()
os.remove()
shutil.move("文件","不存在的路径")
哪几个函数是OS模块里的?
os.mkdir()
os.makedirs()
唯一一个会覆盖同名文件而不会报错的函数是哪一个?
shutil.copy()
shutil.copyfile()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/786661.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号