标签:imp 内存 简单 iter 创建 简单操作 只读 固定 一级目录
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 每次读取一行,并且自带换行功能 每一行末尾会读到\n
#可以指定每行读取的字符长度,下一次读取会从此位置开始
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.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:\python0421\day13\code"))
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:\python0421\day13\code\222.txt"))
#判断是否是绝对路径 os.path.isabs()
print(os.path.isabs("222.txt"))
print(os.path.isabs(r"E:\python0421\day13\code\222.txt"))
#获取文件所在目录,os.path.dirname
print(os.getcwd())
print(os.path.dirname(r"E:\python0421\day13\code\a\b\11.txt"))
print(os.path.dirname(r"E:\python0421\day13\code\a\b"))
文件定位
#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.封装函数,打印某个文件内的所有的文件名
标签:imp 内存 简单 iter 创建 简单操作 只读 固定 一级目录
原文地址:https://www.cnblogs.com/markshui/p/12883053.html