python 文件操作

一、文件操作的函数

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

  模式

  r ,rb  只读

  w,wb  只写

  a,ab  追加

  r+      读写

  w+    写读

  a+    写读(追加写读)

 二 只读(r,rb)

  1.只读(r,rb)

f = open("aaa.txt",mode="r", encoding="utf-8")
content = f.read()
print(content)
f.close()

  rb 读取出来的是bytes类型,在rb模式下,不能选择encoding字符集

f = open("aaa.txt",mode="rb" )
content = f.read()
print(content)
f.close()

  rb用来读取非文本的文件,比如MP3,图片,视频等 因为这种数据是没办法直接显示出来的. 在后面我们文件上传下载的时候还会用到. 还有我们在看的直播,实际都是这种数据。

  2.绝对路径和相对路径:
    1. 绝对路径:从磁盘根目录开始一直到文件名.
    2. 相对路径:同一个文件夹下的文件. 相对于当前这个程序所在的文件夹而言. 如果在同
    一个文件夹中. 则相对路路径就是这个文件名. 如果在上一层文件夹. 则要../

    推荐使用相对路径

  3.文件操作的方法

  1.read()

   将文件中的内容全部读取出来,弊端:占内存,如果文件过大,容易导致内存崩溃

  

f = open("bbb.txt", mode="r", encoding="utf-8")
content = f.read()
print(content)

  2.read(n)

  读取n个字符,需要注意的是,如果再次读取,那么会在当前位置去读而不是从读,如果使用的是rb模式。则读取出来n个字节

  

f = open("bbb.txt", mode="r" encoding="utf-8")
content = f.read(4)
print(content)

  3.readline() 一次读取一行数据,注意:readline()结尾,注意每次读出来的数据都会有一个\n,需要使用strip()方法去掉\n或空格

f = open("ccc.txt", mode="r", encoding="utf-8")
content1 = f.readline()
content2 = f.readline()
content3 = f.readline()

  

  4.readlines()将每一行形成一个元素,放到一个列表中,将所有的内容读取出来,容易导致内存崩溃,不推荐使用

  

f = open("ccc.txt", mode="r", encoding="utf-8")
lst = f.readlines()
print(lst)
for line in lst:
    print(line.strip())

  5.循环读取 ,这种方法是最好的,每次读取一行内容,不会产生内存溢出问题

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

  读取完的文件句柄一定要关闭 f.close()

三、写模式(w,wb)

  写的时候,如果没有文件,则会创建文件,如果文件存在,则将原来的内容删除再写入新内容

f = open("xxx", mode="w", encoding="utf-8")
f.write("asdf")
f.flush() # 刷新
f.close()

四、追加(a,ab)

  在追加模式下,我们写入的内容会追加在文件的结尾

f = open("zzz", mode="a", encoding="utf-8")
f.write("asdf")
f.flush()
f.close()

五、读写模式(r+,r+b)

  对于读写模式,必须是先读,因为默认光标是在开头的,准备读取的,当读完了之后再进行写入,我们以后使用频率最高的模式就是r+

f = open("zzz", mode="r+", encoding="utf-8")
content = f.read()
f.write("asdf")
print(content)
f.flush()
f.close()

六、写读(w+,w+b)

  先将所以的内容清空,然后写入,最后读取,但是读取的内容是空的,不长用

f = open("zzz", mode="w+", encoding="utf-8")
f.write("asdf")
content = f.read()
print(content)
f.flush()
f.close()

七、追加读(a+)

  a+模式下,不论先读还是后读,都是读取不到数据的。

f = open("zzz", mode="a+", encoding="utf-8")
f.write("asdf")
content = f.read()
print(content)
f.flush()
f.close()

八、其他操作

  1. seek(n) 光标移动到n位置,注意,移动的单位是byte

  移动到开头:seek(0)

  移动到结尾:seek(0,2)

  2. tell() 使用tell() 可以帮我们获取到当前光标在什么位置 

  3. truncate() 截断文件

九、修改文件

  文件修改: 只能将文件中的内容读取到内存中, 将信息修改完毕, 然后将源文件删除, 将新文件名改为源文件名

import os
with open("alex.txt",mode="r",encoding="utf-8") as f1,\
    open("alex_副本.txt",mode="w",encoding="utf-8") as f2:
    for line in f1:
        line = line.replace("alex","sb")
        f2.write(line)
os.remove("alex.txt")
os.rename("alex_副本.txt","alex.txt")  

  

  

  

posted @ 2018-08-07 19:05  AndyStrack  阅读(114)  评论(0编辑  收藏  举报