⽂件操作

文件操作

路径

#  绝对路径
#  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  


posted @ 2019-06-09 21:06  樊xs  阅读(288)  评论(1编辑  收藏  举报