文件操作
路径
# 绝对路径
# F: \a\111.txt 从磁盘根处查找
# 相对路径
# 相对于当前文件夹进行查找
os (路径查找)
import os
print(os.getcwd()) # 查看当前工作路径
os.name 备份及改名
import os
os.remove("原文件名字"(同一工作路径)) # 移除原文件
os.rename("新文件名字","原文件名字") # 将新文件改成原文件的名字
seek 光标
# 查看光标位置 tell :
print(file_object.tell()) # 查询的是 字节单位的 光标 位置
移动光标:
- seek(0,0) 文件开始位置
- seek(0,1) 光标的当前位置
- seek(0,2) 文件末尾位置
- seek(3) 按照字节调节 utf-8 3个/一个字 gbk 2个/一个字
# 调整光标位置
file_object.seek(3) # 光标往后移动3个字节
truncate 清空文件
with open("wenjian.txt",mode = "r+", encoding = "utf-8") as f: # "r+"模式 ,光标在最后,必须将光标移至开头
f.read() # 读出原文件里的内容 光标停留在最后
f.seek(0,0) #将光标移动到最前面
f.truncate() # 将文件读完之后 清空
f.write(内容)
# 将新内容写入
文件操作
r (只读)模式
# r (只读)模式 光标默认在0位
# 打开文件
file_object = open("路径/(同一工作路径不用加) + 文件名(全称)",mode = "r",encoding = "utf-8")
# file_object # 文件句柄
content = file_object.read() # 读取全部内容
content = file_object.read(3) # 从光标所在位置往后读取3个字符 → 在r 模式下 read(num) 读取字符
content = file_object.readline() # 读取一行内容
content = file_object.readlines() # 一行一行读取,出来是列表
print(content)
# 关闭文件
file_object.close() # 文件关闭后无法改动
# 读取大文件
for line in file_object:
line.strip() # 去换行符 \n 或者空白
print(file_object) # 一行一行读 防止内存溢出
r+ 可读可写
# r+ (可读可写)模式 最好是先读后写
#打开文件
file_object = open("路径/(同一工作路径不用加) + 文件名(全称)",mode = "r+",encoding = "utf-8")
# 读内容
print(file_object.read())
# 写内容
content = file_object.write("鬼厉") # 写入类型str
print(content)
# 关闭文件
file_object.close()
w (写入)只写模式
- 只写不能读, 先清空文件 ; 文件不存在则新建文件
- 如果文件存在则新内容会部分或全部覆盖旧内容
# w (只写)模式 光标从0位开始
#打开文件
file_object = open("路径/(同一工作路径不用加) + 文件名(全称)",mode = "w",encoding = "utf-8")
# 写内容
content = file_object.write("鬼厉") # 写入类型str
print(content)
# 关闭文件
file_object.close()
a (追加写入)只写模式
- 只追加不能读 ; 文件不存在则新建
- 添加内容默认在原文件末尾
# a (只写)模式 光标在末尾 默认在末尾添加
# 打开文件
file_object = open("路径/(同一工作路径不用加) + 文件名(全称)",mode = "a",encoding = "utf-8")
# 写内容
content = file_object.write("鬼厉") # 写入类型str
print(content)
# 关闭文件
file_object.close()
读写非文本文件(rb . wb)
# f = open("1.jpg",mode="rb")
# rb ,wb,ab 不能指定编码
# print(f.read()) # read() 全部读取
# print(f.read(3)) # 字节 → 在rb里 read(num) 读取的是字节
# import requests 导入请求
# ret = requests.get("http://www.521609.com/uploads/allimg/151124/1-1511241G251317.png")
# f = open("2.jpg",mode="wb")
# f.write(ret.content)
# f.close()
with open
- 能同时操作多个文件 并且帮助自动关闭文件
- 上下文管理*
# open 只能操作单一文件
# f = open("day8",mode="r",encoding="utf-8")
# f.read()
# with open 能同时操作多个文件 并且帮助自动关闭文件
# with open("day8",mode="r",encoding="utf-8") as(作为) f: # 面向对象中上下文管理
# print(f.read())
# with open("day8",mode="r",encoding="utf-8") as f,\(\如需换行用\)
# open("a",mode="w",encoding="gbk") as f1:
# 就等于with open("day8",mode="r",encoding="utf-8") as f, open("a",mode="w",encoding="gbk") as f1:
# print(f.read())
# f1.write("真饿!")
修改文件
# 修改文件:
with open("原文件")as f,open("新文件")as f1:
f.for循环的读取
f1.for循环的写入
三元运算
# 三元运算又称三目运算,是对简单的条件语句的简写, 例
if 条件成立:
val = 1
print(val)
else:
val = 2
print(val)
# 转换为三元运算:
val = 1 if 条件成立 else 2
print(val)
文件清单转 列表/字典(示例)
# 演示一
序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多
.......
通过代码,将其构建成这种数据类型:
[{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},
......]
with open("al.txt",mode="w",encoding="utf-8") as file_object:
file_object.write('''序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多''')
lst_0 = []
with open("al.txt",mode="r",encoding="utf-8") as file_object:
lst = file_object.readline().strip().split()
for i in file_object.readlines():
dic = {}
lst_1 = i.strip().split()
for i_1 in range(len(lst)):
dic.setdefault(lst[i_1],lst_1[i_1])
lst_0.append(dic)
print(lst_0)
自由添加 示例
# 演示二
序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多
.......
通过代码,将其构建成这种数据类型:
[{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},
......]
lst_1 = []
with open("a1.txt",mode="w+",encoding="utf-8") as file_1:
file_1.write('''序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多''')
file_1.seek(0,0)
lst = file_1.readline().strip().split() #['序号', '部门', '人数', '平均年龄', '备注']
for i in file_1:
dic = {} # 字典要在循环文件时添加
el = i.strip().split()
for i_1 in range(len(el)):
dic.setdefault(lst[i_1],el[i_1])
lst_1.append(dic)
print(lst_1)
防止空行影响循环
with open("文件名",mode="r",encoding="utf-8") as file_1:
for i in file_1:
if i == "": # 防止空行影响程序运行
continue