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 \user\bin\***
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)\Tencent\QQ\Bin\QQScLauncher.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()
posted @ 2018-10-26 19:00  EuanXu  阅读(157)  评论(0编辑  收藏  举报