参数
f = open("aa",mode="r",encoding="utf-8")
#定义名 = open("文件名","模式",指定打开字符集方式)
f.name #查看db文件名
f.tell() 显示文件中,当前 光标位置
f.read() 读全部 (read是读字符 其他都是字节),f.read(5)读取5个字符
f.readline() 读一行 读取成列表形式
f.wirte() 写入
f.close() 关闭
f.seek(10) 移动10个字节 #f.seek(0,2)光标移动到最后操作 (对字节操作,utf-8中,汉字代表3个字节
f.encoding 查看字符编码
f.writable() 是否以写模式打开, #True为真 False为假
f.readable() 是否以读模式打开, #True为真 False为假
f.flush() 强制刷新到硬盘 #一般用于打印实时日志,基本不用,会导致硬盘速度变慢
文件读取模式
f = open("aa",mode="r",encoding="utf-8")
#定义名 = open("文件名","模式",指定打开字符集方式)
r #读(指定文件名,需要手动创建文件)
先创建文件aa
读取文件
f = open("aa",mode="r",encoding="utf-8") #默认是r 不加r也行
f.read() #读取文件到内存
print(f.readline(),end="") #end="" 替换
(可改),效果:结尾不会换行了, 注:print参数结尾默认是
,
print(f.writable()) #是否以写模式打开, #True为真 False为假 print(f.readable()) #是否以读模式打开, #True为真 False为假
f.close() #结束
#读取文件4个字符,
也算字符
with open("aa","r",encoding="utf-8")as f :print(f.read(4))
w #写(没文件则创建,已有文件则清空并写入文件内容 )
f = open("aa",mode="w",encoding="utf-8")
#lyric是操作文件. mode="w" 写入模式 模式可替换. encoding="utf-8" 用utf-8格式打开lyric文件,
f.write("wirte one work...
") #
换行 write是写入参数
f.write ("wirte seven eight nine ten
")
f.close() #结束
-------------------------------------------------------------------
rs = ["aa","bb","cc"]
f = open("lyric","w") #打开lyric的写功能(lyric文件存在,则清空数据)
for i in rs: #i是rs(内存中黑名单的元素)
f.write(str(i)+"
") #f.write 写入数据 str(i)+"
" 写入i的每个值到lyric中,
另起一行
f.close() #文件结束
a #追加(没文件则创建,已有文件则追加文件内容)
f = open("a1a1",mode="a",encoding="utf-8")
#aa是操作文件. mode="w" 写入模式 模式可替换. encoding="utf-8" 用utf-8格式打开lyric文件,
f.write("wirte one work...
") #
换行
f.write ("wirte seven eight nine ten
")
f.close() #结束
#"+" 表示可以同时读写某个文件
r+ #先读,后追加 #可以指定长度修改
w+ #先清空+,后追加
a+ #先追加,后读取
#U表示 将
自动转换成
(windows中换行是
linux中换行是
rU #r和U的组合
r+U #r+和U的组合
#b表示 处理二进制文件,对所有文件都能读取
rb 以2进制模式打开文件,不能声明encoding(不能指定字符类型,默认是二进制格式)
#with...as... 优点:读取完文件自动关闭
with open("aa","rb")as f :
print(f.read().decode("utf-8")) #decode 转成**模式显示
wb 以二进制写入文件,必须写入bytes格式
f = open("111","wb") #111是文件
f.write("guo 1 哈哈".encode("utf-8")) #写入时必须指定写入的编码类型
print(f)
f.close()
ab 以二进制追加文件,必须写入bytes格式
f = open("111","ab") #111是文件
f.write("guo 1 哈哈
".encode("utf-8")) #追加时必须指定写入的编码类型
print(f)
f.close()
rb+ #以二进制形式先读,后追加 #可以指定长度修改
wb+ #以二进制形式先清空+,后追加
ab+ #以二进制形式先追加,后读取
文件两种修改方式
模式1
#读取文件修改后,保存到内存,再覆盖原文件 #弊端占内存,优点省硬盘空间
#文件lyric手动创建,写内容(文件包含aa)
f = open("lyric",mode="r",encoding="utf-8") #定义变量f=打开lyric文件,模式:"读",encoding="utf-8"访问文件编码
data = f.read() #定义变量data为读取文件内容
data = data.replace("aa","bb") #replace文件替换, aa全部替换为bb
f.close() #读模式结束
f=open("lyric",mode="w",encoding="utf-8") #定义变量f=打开lyric文件,模式:"写",encoding="utf-8"访问文件编码
f.write(data) #内存文件内容,写入到文件(原文件清空)
f.close() #写模式结束
模式2
#f文件每读一行并修改后,写入到f_new文件 #弊端占硬盘空间,优点省内存空间
import os #工具箱
f = open("lyric",mode="r",encoding="utf-8") #定义变量f=打开lyric文件,模式:"读",encoding="utf-8"访问文件编码
f_new= open("lyric_new",mode="w",encoding="utf-8") #定义变量f_new=打开lyric_new文件,模式:"写",encoding="utf-8"访问文件编码
for line in f:
if "aa" in line:
line = line.replace("aa","bb") #replace文件替换, aa全部替换为bb
f_new.write(line)
f.close() #读模式结束
f_new.close() #写模式结束
os.remove("lyric") #删除lyric文件
os.rename("lyric_new","lyric") #lyric_new改名为lyric
#读取aa和bb文件操作
读取aa和bb文件
with open("aa","r",encoding="utf-8") as f_aa, open("bb") as f_bb:
print(f_aa.read())
print(f_bb.read())
读取aa文件写入到bb
with open("aa","r",encoding="utf-8") as f_aa, open("bb","w",encoding="utf-8") as f_bb:
tow_f=f_aa.read()
f_bb.write(tow_f)
读取aa文件追加到bb
with open("aa","r",encoding="utf-8") as f_aa, open("bb","a",encoding="utf-8") as f_bb:
tow_f=f_aa.read()
f_bb.write(tow_f)
2个文件转列表,转字典,转成列表中的N个字典
#db文件格式
#aa
#bb
#cc
#读取db文件生成列表
goods =[]
for gn in open("goods","rt",encoding="utf-8"):
goods.extend(gn.strip().split())
price =[]
for en in open("price","rt",encoding="utf-8"):
price.extend(en.strip().split())
print(price)
#2个列表合并成字典
shop=dict(zip(goods,price))
print(shop)
#字典转成列表的子集添加n个字典
test = []
for k, v in shop.items():
test.append({"name": k, "m": v})
print(test)
一个文件转成列表中的N个字典
f2 = open('product', 'r', encoding='utf-8')
product_data = f2.read()
f2.close()
v = product_data.split('
')
print(v)
# 将列表转换成字典
lin = []
for i in v:
v1 = i.split(':')
print(v1)
v1[1] = int(v1[1])
dic = {v1[0]:v1[1]}
lin.append(dic)
print(lin)
光标问题
cuisor读取光标地址, read读取文件全部内容, seek 把光标移动到某个字节后面
f.seek(10) 代表移动10个字节(utf-8中,汉字代表3个字节)
创建文件lyric,填写内容如下
123456testABCDE
my name is guolm
python执行命令:
>>>f = open("lyric","r",encoding="utf-8") #encoding 指定读取文件类型的格式
>>>print('cuisor:',f.tell()) #f.tell()显示当前文件内光标位置,
cuisor: 0
>>>print(f.read()) #读取f变量中全部内容, 如果是print(f.readline()) 读取一行内容
123456testABCDE my name is guolm
>>>print("--------------------------------------")
>>>print('cuisor:',f.tell()) #f.tell()再次执行,28是当前光标所在字符位置
cuisor: 33
>>>print(f.read()) #上次执行read()读取全部,本次读取文件从最后执行,所有没内容
>>>print("--------------------------------------")
>>>f.seek(10) #f.seek(10) 代表移动10个字节后面, f.seek(0)移动到开头 (utf-8中,汉字代表3个字节)
>>>print("cursor:",f.tell()) #因为上边操作,光标从10字节之后,执行命令
cursor: 10
>>>print(f.read(5)) #读取5字符 注:汉字代表一个字符,每行的结尾(
)也代表一个字符
ABCDE
>>>f.close() #文件结束