Python 的文件操作

一 初识文件操作

使用Python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取文件句柄,然后通过文件句柄就可以对文件进行各种各样的操作,打开的方式不一样能执行的操作也会有相应的差距

打开文件的方式:  r , w , a , r+ , w+ , a+ , rb , wb , ab , r+b , w+b , a+b  默认使用的是r (只读)模式

1 文件操作的函数

     open(文件名(路径)),mode="?",encoding= "字符集")

2 只读操作   mode = "r"

(1) 绝对路径:  从磁盘的根目录寻找  或者  从互联网上寻找一个路径

(2) 相对路径:  相对当前程序所在的文件夹  ../上一层文件夹                  (用的最多)

 

f = open("王者荣耀你好.txt",mode="r",encoding="utf-8")
s = f.read()
print(s)
f.close()  # 这个必须写 不然后面的操作容易报错

#结果
   读出文件中的内容  适用于  .TXT  文件

一次只读一行   readline()

 

f = open("王者荣耀你好.txt",mode="r",encoding='utf-8')
while 1:
    s = f.readline().strip()
    if s != "":    #判断当读出的部位  空  则执行
        print(s)
f.close()

# while  比较占内存   
  可以用于文件监控  但是不实用

 

for 循环不占内存, 同时自动读完停止
f = open("王者荣耀你好.txt",mode='r',encoding='utf-8')
for i in f:  # 文件是一个可迭代的对象
    print(i.strip())  # 可以一行一行的读
f.close()

 

3 只写操作

带w的  只要你操作了,就会清空源文件    如果文件不存在    就会自动创建新文件

f = open("歌曲菜单.txt",mode="w",encoding="utf-8")  # 没有文件自动创建
s = f.write("你说嘴巴嘟嘟,我送你江南七妹也")
f.flush()
f.close()
f = open("王者荣耀你好.txt",mode="w",encoding="utf-8")   #有文件 则删除源文件  自动创建新文件
s = f.write("你个垃圾还玩王者")
f.flush()
f.close()

4 a 追加

a  是在后面追加新的

写的时候需要自己手动换行

f = open("美女名单",mode="a",encoding="utf-8")
f.write("\nlx\n")  
f.write("yt")
f.flush()
f.close()

5 处理非文本文件用 rb wb ab  ,  b 是 bytes    mode  里如果有b ,   encoding=    就不用写了

格式:  

f  = open("路径",mode = " *b")

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+  a+ 

不论你读取了多少内容,光标在哪,写入的时候都是在结尾写入,除非上来就写入,这时写入是在开头

最好用的读写是同时存在的模式

r+   读写模式  先读后写

w+  写读模式   先写后读

1  r+

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()

2 w+

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

3 a+

f = open("阿西吧", mode="a+", encoding="utf-8")
f.write("我要加入德云社")
f.seek(0)  #将光标移到最前面
s = f.read()
print(s)
f.flush()
f.close()

三 文件相关操作

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

f = open("阿西吧",mode="r",encoding="utf-8")
f.seek(3)   # 光标向右移动三个字节
for i in f:
    print(i)  
s = f.seek(1)  #读取一个字符
print(s)
f.tell()  #查询光标在哪
f.close()

seek()

格式:

seek(偏移量,位置)

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

truncate()

从文件开头截断到光标位置
如果给参数,从头截断到参数位置

f = open("你妹的",mode="w",encoding="utf-8")
s = f.write("好好学习不行吗,非要玩游戏")
f.seek(9)
print(f.tell())  #光标当前位置

f.truncate(21) #截取21个字节  7个字   utf-8编码格式
f.close()

tell()

查询光标在那个位置

三 文件的修改

模块的引用   import

with   打开文件   后面可以不用关文件

格式:   with   open ("路径",mode=" r(读)",encoding= "编码格式")   as  返回值   ,/(换行)  open("路径副本",mode="w(写)",encoding= "编码格式")   as  返回值1

例如:

import os
with open("歌曲菜单.txt",mode="r",encoding="utf-8") as f, \
    open("歌曲菜单-副本.txt",mode="w",encoding="utf-8") as f1:
    for i in f:
        i = i.replace("嘟嘟","哈哈")
        f1.write(i)
os.remove("歌曲菜单.txt")  #删除
os.replace("歌曲菜单-副本.txt","歌曲菜单.txt")  # 将副本更名为新列表

将文本中的内容一列表的形式展现出来

例如:  不太理解

import os
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 @ 2018-08-06 19:18  heshun  阅读(223)  评论(0编辑  收藏  举报