知识点 文件操作
- open()函数
# open()常用的函数
f=open("文件名称",encoding="utf-8") # 打开一个文件流
f.read() # 获取所有的数据,返回string字符串
f.seek(0) # 定义光标位置在最开头的位置
f.readline() # 这个是一次获取一行数据,在read后面直接调用reading会没有数据,因为read已经让光标移动到文件的最末尾,需要关闭文件或定义光标位置
f.close()
f=open("文件名称",encoding="utf-8")
f.readlines() # 读取所有数据,并且返回一个文件内容列表,并且会返回换行符
# open() 函数的写入
f=open("文件名称",encoding="utf-8",mode='w') # 打开一个文件流,并允许写入
f.write("other~")
# open()函数的关闭,使用with as的语句就可以不用再次执行关闭
with open("文件名称",encoding="utf-8") as f:
f.read()
模式 | 描述 |
---|---|
mode=r | 默认为r,read读取模式,文件指针默认在最开始 |
mode=a | add写入追加模式,如果文件存在,指针在末尾,追加写入内容,如果不存在则创建文件后写入 |
mode=w | write写入模式,如果文件存在则覆盖文件内容,然后写入,如果文件不存在,则创建文件后写入 |
mode=rb | readbyte 二进制只读模式,一般用于图片读取 |
mode=wb | writebyte 二进制只读模式,一般用于图片写,也是会覆盖的 |
mode=ab | addbyte 二进制追加模式,一般用于图片 |
知识点 包和路径
# from 后面的路径是从sys.path中截取的
import sys,os
pprint.pprint(sys.path)
# 获取当前路径的绝对路径
cwd = os.path.abspath(__file__)
# 获取cwd的目录目录
dir_name=os.path.dirname(cwd)
# 路径拼接
new_file = os.path.join(dir_name,"new_abc.txt")
open(new_file,mode='w')
f.close
练习
题目1:把以下字典分行添加到文件当中:
person_info = [
{
“name”: “明鹏程”,
“age”: 22,
“gender”: “男”,
“hobby”: “学习”,
“motto”: “学习使我快乐”
},
{
“name”: “萌笑天”,
“age”: 20,
“gender”: “女”,
“hobby”: “拿30K offer”,
“motto”: “下次拿个40K 的”
},
]
得到一个 info.txt 的文件:
name,age,gender,hobby,motto
明鹏程,22,男,学习, 学习使我快乐
萌笑天,20,女,拿30K offer,下次拿个40K 的
# 写入符合题目要求的:
with open("info.txt", mode="a", encoding="utf-8") as f:
keys=person_info[0].keys()
strs=""
for i in keys:
strs+=i+","
f.write(strs.strip(","))
f.write("\n")
valus_s=""
for i in person_info:
value =i.values()
for j in value:
valus_s +=str(j)+","
f.write(valus_s.strip(","))
valus_s=""
f.write("\n")
# 写入其他两种形式
with open("person_info.txt", mode="w", encoding="utf-8") as f:
for i in person_info:
for j in i.items():
f.write(f"{j[0]}:{j[1]}") # 第一种方式,每个key,value是一行
f.write("\n")
f.write("************\n")
f.write(str(i)) # 第二种方式,一个字典是一行
f.write("\n************\n")
题目:cases.txt 文件中有 2 行数据:
url:/futureloan/mvc/api/member/register@mobile:18866668888@pwd:123456
url:/futureloan/mvc/api/member/recharge@mobile:18866668888@amount:1000
把txt里面的两行内容取出然后保存到一个列表和字典当中:(可定义函数)
[
{
‘url’:’/futureloan/mvc/api/member/register’,
‘mobile’:‘18866668888’,
‘pwd’:‘123456’
},
{
‘url’:’/futureloan/mvc/api/member/recharge’,
‘mobile’:‘18866668888’,
‘amount’:‘1000’
}
]
def return_info(filepath):
with open(filepath, encoding="utf-8") as f:
lis = []
for i in f.readlines():
dicts = {} # 每循环一行就是一个新的dicts
info_list = i.split("@")
for j in info_list:
info_dicts = j.split(":")
dicts[info_dicts[0]] = info_dicts[1].strip("\n")
lis.append(dicts)
return lis
print(return_info("cases.txt"))