第八天

今日主要内容
    1. 文件操作的函数
        open(文件名(路径), mode="?", encoding="字符集")
    2. 模式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b
        r
        w
        a
        r+
        b
    3. 常用的操作
        1. 光标(seek)*
            seek(0) 开头
            seek(0,2) 结尾
        2. tell() 光标的位置
        3. truncate 截断文件
    4. 修改文件
        1. 引入os模块
        2. 打开目标文件, r
        3. 打开文件副本, w
        4. 从r中读取内容进行修改. 写入到副本中
        5. 删除源文件
        6. 重命名副本

 

读文件:

文件路径:
1. 绝对路径,从磁盘的根目录寻找 或者 从互联网上寻找一个路径
2. 相对路径(用的多). 相对于当前程序所在的文件夹 ../上一层文件夹
f = open("哈哈哈哈哈", mode="r", encoding="UTF-8")
s = f.read()
print(s)
f.close() # 如果没有这句话, 你在下面的程序中如果删除这个文件. 就会报错

f = open("e:/abc/里皮.txt", mode="r", encoding="gbk")
s = f.read()
print(s)
f.close()

f = open("呵呵呵", mode="r", encoding="utf-8")
while 1:
s = f.readline().strip() # 一次读一行
if s!= "":
print("内容是",s)
for line in f: # 文件是一个可迭代对象
print(line.strip()) # 一行一行的处理数据
lst = f.readlines()
print(lst)
f.close()

 

写文件:

带w的. 只要你操作了. 就会清空源文件
如果文件不存在. 会自动创建文件
f = open("阿西吧", mode="w", encoding="utf-8")
f.write("呀! 养狗了没有?\n")
f.write("养狗四米大")
f.flush()
f.close()

a模式
写的时候. 换行需要手动控制 \n
f = open("阿西吧", mode="a", encoding="utf-8")
f.write("四米大?")
f.write("四米大")
f.flush()
f.close()

rb, wb, ab, bytes如果处理的是非文本文件, mode里如果有b. encoding就不能给了
f = open("c:/pdd.jpg", mode="rb") # 这里不能写encoding
e = open("e:/pdd.jpg", mode="wb")
for line in f: # 从c盘读取 line你是不知道读取了多少数据的
e.write(line) # 写入到e盘
f.close()
e.flush()
e.close()

 

+的:

不论你读取了多少内容.光标在哪儿,写入的时候都是在结尾写入, 除非上来就写入, 这时写入是在开头
最好用的读写同时存在的模式
r+ 读写模式. 先读后写
w+ 写读模式. 先写后读
f = open("阿西吧", mode="r+", encoding="utf-8")
s = f.read(3) # 读取三个字符
print(s)
f.write("不养了. 送人") # 在末尾写

f.write("葫芦娃")
s = f.read()
print(s)
s = f.read(2)
print(s)
f.write("还有何云伟")
f.close()

很少用. 因为会清空文件中的内容
f = open("阿西吧", mode="w+", encoding="utf-8")
f.write("张云雷也要退出德云社") # 写完之后光标在最后. 读取是没有内容的
f.seek(0) # 移动光标, 移动到开头
s = f.read()
print("读取的内容是",s)
f.flush()
f.close()

a+
f = open("阿西吧", mode="a+", encoding="utf-8")
f.write("我要加入德云社")
f.seek(0)
s = f.read()
print(s)
f.flush()

 

f = open("阿西吧", mode="r", encoding="utf-8")
for line in f:
print(line.strip())

f.seek(0) # 移动到开头

for line in f:
print(line.strip())

f.close()

文件的相关操作:

f = open("阿西吧", mode="r", encoding="utf-8")
f.seek(3) # 3byte => 1中文
s = f.read(1) # 读取一个字符
print(f.tell()) # 光标在哪儿???
f.close()

seek(偏移量, 位置)
seek(0) # 开头
seek(0,2) # 在末尾的偏移量是0 末尾

f = open("啊同类个同同同", mode="w", encoding="utf-8")
f.write("哇哈哈哈哈压缩盖伦")
f.seek(9)
print(f.tell())
# 从文件开头截断到光标位置
# 如果给参数. 从头截断到参数位置
f.truncate(12)
f.close()

 

文件修改:

# 引入模块
import os
import time

# 打开目标文件
f1 = open("alex昨天干嘛去了", mode="r", encoding="utf-8")
with open("alex昨天又干嘛去了", mode="r", encoding="utf-8") as f1, \
open("alex昨天又干嘛去了_副本", mode="w", encoding="utf-8") as f2:

for line in f1:
line = line.replace("alex", "sb")
f2.write(line)

time.sleep(3)
# 删除文件
os.remove("alex昨天又干嘛去了")
time.sleep(3)
os.rename("alex昨天又干嘛去了_副本","alex昨天又干嘛去了")

 

文件操作示例:

lst = []

with open("2018-08-06.log", mode="r", encoding="utf-8") as f:
first = f.readline().strip().split(",")
for line in f:
dic = {} # 每一行一个字典
# 1,alex,10086,特斯拉
ls = line.strip().split(",")
for i in range(len(first)):
dic[first[i]] = ls[i]

lst.append(dic)

print(lst)

posted on 2018-08-04 14:46  符,  阅读(138)  评论(0)    收藏  举报

导航