python学习第八天


打开一个文件的操作:
f = open(文件名,mode="r",encoding="utf-8")
f --> 变量,为操控文件的句柄

文件操作的相关模式Mode
文本文件:
r: 只读
w: 只写
a: 追加
r+: 读写
w+: 写读
a+: 追加写读

非文本文件: 其中 b 表示读取和写书的是字节
rb
wb
ab
r+b
w+b
a+b



文本文件的读写

读:
f = open(文件名,mode="r",encoding="utf-8")
# 读取文中内容
content1 = f.read(n) # 读取 n 个字符
content2 = f.read() # 全部读取
content3 = f.readline # 读取一行
lst = f.readlines() # 全部读取,返回列表

写:
f = open(文件名,mode="w",encoding="utf-8") # w可以帮助我们创建文件夹
f.write(内容)
f.close

追加写:
f = open(文件名,mode="a",encoding="utf-8")
f.write(内容)
f.close


文件的复制: (重点)
1.文本文件的复制:
f1 = open(文件名,mode="r",encoding="utf-8")
f2 = open(文件名,mode="w",encoding="utf-8")
for line in f1:
f2.write(line)
f1.close
f2.close
2.非文本文件的复制:
f1 = open(文件名,mode="r",encoding="utf-8")
f2 = open(文件名,mode="w",encoding="utf-8")
for line in f1:
f2.write(line)
f1.close
f2.close


文件路径的选择:
1.绝对路径:
从磁盘根目录下寻找文件
Windows c,d,e,f
linux userin***
2.相对路径:
相对于当前程序所在文件夹
../ 表示上一层文件夹


需要注意的几个点:

r+,正常的
f = open("person", mode="r+", encoding="utf-8")
content = f.read()
f.write("黄蓉")
print(content)

错误的示范
f = open("person", mode="r+", encoding="utf-8")
f.write("杨千桦") # 默认如果直接写入的话。 在开头写入。 覆盖开头的内容
content = f.read()
print(content)

r+
坑: 不论你读取多少内容。再次写入的时候都是在末尾
f = open("person", mode="r+", encoding="utf-8")
info = f.read(3)
f.write("胡辣汤")
print(info)

w+
f = open("person", mode="w+", encoding="utf-8") # 先清空。 然后再操作
f.write("你好。 我叫肿瘤君")
content = f.read() # 写入东西之后。 光标在末尾。 读取不到内容的
print(content)
f.close()

a+, 不论光标在何处 写入的时候都是在末尾
f = open("person", mode="a+", encoding="utf-8")
f.write("我叫李嘉诚") # 默认写在末尾
content = f.read()
print(content)
f.close()


光标:
.seek(参数1, 参数2) # 移动光标
参数1表示的是偏移量,移动多少个单位
参数2表示从什么位置进行偏移
0: 开头
1: 当前位置
2: 末尾
把光标移动到文件的开头: seek(0)
把光标移动到末尾: seek(0, 2)

.tell() 程序返回当前光标的位置
info = f.read(3)
print(info)
print(f.tell()) # 获取光标位置

.truncate() 截断文件. 慎用
尽量不要瞎测试, w, w+
f = open(r"C:Program Files (x86)TencentQQBinQQScLauncher.exe", mode="r+", encoding="utf-8")
f.seek(5) # 光标移动到5
f.truncate() # 默认从开头截取到光标位置
f.truncate(3) # 从头截取到3
f.close()


文件修改: (重点)
import os # 导入 os 模块
imoort time # 导入时间导数
with open(文件名,mode="r",encoding="utf-8") as f1
open(文件名_副本,mode="w",encoding="utf-8") as f2: # 优点:不用关闭句柄, 自动关闭连接
for line in f1:
line = line.replace(old,new)
f2.write(line)
time.sleep(5)
os.remve(文件名) # 删除源文件
time.sleep(5)
os.remove(文件名_副本,文件名) # 把副本改名成源文件


编号,名称,价格,数量,仓库,phone
1,榴莲,500,60000,1号仓库,10010
2,苹果,700,70000,2号仓库,10086
1,榴莲,500,60000,1号仓库,155
2,苹果,700,70000,2号仓库,166

f = open("水果.data", mode="r", encoding="utf-8")
titles = f.readline().strip() # 读取第一行 id,name,price,num
t_list = titles.split(",") # 【id,name,price,num】

lst = []
for line in f: # "1,苹果,500,60000" {id:1,name:liulian, num:xx, price:xxx}
dic = {}
ll = line.strip().split(",")
for i in range(len(t_list)):
dic[t_list[i]] = ll[i]
lst.append(dic)
f.close()
print(lst)



1. 文件操作 open() 文件句柄
open()打开一个文件, 获取的是文件句柄
read()
readline()
readlines()
write()

for line in f: 遍历文件中的内容

路径的问题:
1. 绝对路径
从磁盘根目录寻找
2. 相对路径
从当前程序运行的文件夹内寻找
2. 文件操作的相关模式Mode
r: 只读
w: 只写
a: 追加
r+:
w+:
a+:

非文本文件
rb
wb
ab

r+b
w+b
a+b

3. 相关操作
1. seek()移动光标(重点)
seek(0) 开头
seek(0,2) 移动到末尾
2. tell() 获取光标所在的位置
3. truncate() 截断文件

4. 文件修改
with open(xxx) as 句柄,
open(xxxxx)as xxx
不用手动关闭文件句柄

文件修改的步骤
1. 从源文件中读取数据。
2. 写入到副本文件中
3. 删除源文件
4. 把副本重命名成源文件
import os
os.remove()
os.rename()
原文地址:https://www.cnblogs.com/EuanXu/p/9858199.html