Python文件操作
Posted 慕|白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python文件操作相关的知识,希望对你有一定的参考价值。
一、关于文件
- 文件的作用:把一些数据存储起来
- 使用文件流程
- 打开文件,读写文件,关闭文件
二、读写文件简单操作
1.读取文件 read
#打开文件 file = open("demo_02/1.txt",mode="r") #读取文件 ret = file.read() print(ret) #关闭文件 file.close() # file叫做文件句柄(变量),用来操作文件 #第一个参数是文件的路径 #第二个参数 mode=访问文件的模型,r表示读,默认是r模式 #文件找不到会报错
2.写文件 write
# 2.写文件 write file = open("demo_02/2.txt",mode="w") file.write("python") file.close() #文件不存在,会自动创建文件(不会创建目录)
三、文件权限
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。一般用于 非文本文件如图片等。
注意:二进制文件把内容表示为一个特殊的 bytes 字符串类型。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于 非文本文件如图片等。
# file = open("demo/1.png","rb") file = open("demo_02/1.txt","rb") ret = file.read() print(ret) # r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 file = open("demo_02/1.txt","r+") file.write("zhang wei qiang") file.close()
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑, 即原有内容会被删除。
如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开 头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于 非文本文件如图片等。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即 原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头 开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非 文本文件如图片等。wb+
#写入一张图片 from demo.img import img2 file = open("demo_02/1.jpg","wb") file.write(img2) file.close() file = open("demo_02/1.txt","w+") ret = file.read() print(ret) file.close()
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也 就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件 进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文 件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在, 创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于读写。如果该文件已存在,文件指针将会放在文 件的结尾。如果该文件不存在,创建新文件用于读写。
file = open("demo_02/2.txt","a") file.write("python") file.close() file = open("demo_02/2.txt","a+") ret = file.read() print(ret) file.close()
文件操作
read()
调用 read()会一次性读取文件的全部内容,如果文件有 10G,内存就爆了,会导致程序卡死, 所以,要保险起见,可以反复调用 read(size)方法,每次最多读取 size 个字符的内容
file = open("demo_02/2.txt","r") print(file.read(5)) print(file.read(5)) print(file.read(5)) file.close()
readline()
readline 每次读取一行,并且自带换行功能 每一行末尾会读到
#可以指定每行读取的字符长度,下一次读取会从此位置开始 file = open("demo_02/1.txt","r") print(file.readline()) print(file.readline()) print(file.readline()) file.close()
readlines()
一次性以行的形式读取文件的所有内容并返回一个 list,需要去遍历读出来
file = open("demo_02/1.txt","r") ret = file.readlines() # print(ret) for i in ret: print(i,end=‘‘) file.close()
循环读取
file 句柄是一个可迭代的对象因此,可以循环读取文件中的内容,每次读一行
file = open("demo_02/1.txt","r") for i in file: print(i,end=‘‘) file.close()
写入write和writelines(多条数据一次性写入)
file = open("demo_02/3.txt",‘w‘) # file.write("zhangweiqiang") lst = ["hello","world","zs","ls"] for i in lst: file.write(i) # file.writelines(lst) file.close()
cvs 文件读写
写入cvs文件,必须创建 csv 模块中对应的 writer 对象,通过 writer 对象完成文件内容的写入操作
读取 csv 文件的操作,主要通过 csv 模块中的 reader 对象来完成,通过加载文件数据到 reader 对象中,文件中的数据就会按照固定的格式读取到程序中进行处理
file = open("demo_02/movie.csv","w",newline="") writer = csv.writer(file) writer.writerow(["电影名称","评分","演员","网址"]) writer.writerows([["战狼"," 9.0","吴京","www.zhanlang.com"], ["战狼2"," 9.2","吴京","www.zhanlang2.com"]]) file.close() file = open("demo_02/movie.csv","r",newline="") reader = csv.reader(file) # print(reader) #<_csv.reader object at 0x0000000002205F50> for i in reader: print(i) file.close()
爬取豆瓣电影写入csv文件
import csv file = open("demo_02/movie2.csv","w",newline="") writer = csv.writer(file) writer.writerow(["电影名称","评分","演员","网址"]) for i in movie_dict2["data"]: # print(i["title"],i["rate"],i["casts"],i["url"]) movie_name = i["title"] rate = i["rate"] casts = i["casts"] url = i["url"] writer.writerow([movie_name,rate,casts,url]) file.close()
使用 wIth 方式操作文件,可以不用关闭文件,会自动关闭文件
# with open("demo_02/1.txt","r") as file: # print(file.read()) #with 内部实现了__enter__和__exit__方法,会自动关闭文件 class Foo: def __init__(self): print("--init--") def test(self): print("--test--") def __enter__(self): print("enter") return self def __exit__(self, exc_type, exc_val, exc_tb): print("with执行完毕,调用exit") with Foo() as f: f.test() print("最后一行代码")
乱码:Python 读写文件时,默认使用的编码为平台编码,也就是 gbk, 在 pycharm 中创建的文件默认使用的是 utf-8 编码
- 注意:在打开文件时,指定编码,避免出现乱码问题
os 模块
使用 os 模块对文件进行一些相关操作
重命名文件 os.rename(旧文件名,新文件名)
import os # os.rename("demo_02/1.txt","demo_02/111.txt") os.rename("demo_02/2.txt","222.txt")
2.删除文件 os.remove(文件名)
#删除demo_02/3.txt os.remove("demo_02/3.txt")
3.创建单层目录 os.mkdir(目录名)
#创建test1目录 os.mkdir("test1")
创建多级目录 os.makedirs(目录名)
os.makedirs("a/b/c/d")
4.删除单层目录 os.rmdir(目录名)
os.rmdir("test1") #只能删除空目录
删除多级目录 os.removedirs(目录名)
若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 如果上一层目录不为空则停止删除文件
os.removedirs("a/b/c/d")
5.获取当前所在目录 os.getcwd()
print(os.getcwd())
6.获取目录列表 os.listdir(path)
print(os.listdir("E:python0421day13code"))
7.切换所在目录 os.chdir()
# print(os.getcwd()) os.chdir("a/b") # print(os.getcwd()) with open("222.txt","w")as file: file.write("hello world")
8.判断文件或文件夹是否存在 os.path.exists()
# print(os.path.exists("222.txt")) print(os.path.exists("a"))
9.判断是否是文件 os.path.isfile()
print(os.path.isfile("222.txt")) print(os.path.isfile("a"))
10.判断是否是目录 os.path.isdir()
print(os.path.isdir("222.txt")) print(os.path.isdir("a"))
其他
#获取绝对路径 os.path.abspath() print(os.path.abspath("222.txt")) # 获取路径中的最后部分 print(os.path.basename("222.txt")) print(os.path.basename(r"E:python0421day13code222.txt")) #判断是否是绝对路径 os.path.isabs() print(os.path.isabs("222.txt")) print(os.path.isabs(r"E:python0421day13code222.txt")) #获取文件所在目录,os.path.dirname print(os.getcwd()) print(os.path.dirname(r"E:python0421day13codea11.txt")) print(os.path.dirname(r"E:python0421day13codea"))
文件定位
#tell()查看文件定位 # with open("222.txt","r") as f: # with open("222.txt","a") as f: # print(f.tell()) #seek(offset,whence) offset偏移量,whence定位(0文件开头,1定位不变,2文件结尾) with open("222.txt","r") as f: print(f.tell()) f.seek(2,0) print(f.tell()) print(f.read())
文件操作练习
1.封装函数,可以实现文件复制(先读取目标文件,再写入新文件) 如:将111.txt复制一份,文件名为222.txt 2.封装函数,可以实现文件备份(先读取目标文件,再写入新文件) 如:将111.txt复制一份,文件名为111_副本.txt 3.封装函数,打印某个文件内的所有的文件名
以上是关于Python文件操作的主要内容,如果未能解决你的问题,请参考以下文章