Python基础之文件操作

一、文件操作

1.1、r模式

open参数:第一个参数为文件路径,依次为文件操作模式,和指定编码打开文件。

Mac版本可省略后俩个参数

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

# Mac版本可省略后两个参数
f = open("123")
print(f.read())
f.close()

1.2、rb模式

rb模式读出来的是字节byte,但是open参数不能指定编码。

rb作用在读取非文本文件时,例音频、视频、图像等就需要使用rb模式读取数据,因为这种格式是无法直接显示出来。

f = open("123",mode="rb")
print(f.read())
f.close()
# 关于文件路径分为绝对路径和相对路径
# 绝对路径:依次从根目录下(或磁盘)依次查找文件
# 相对路径:在相同文件下,可以直接写文件名
# 实际环境中请使用绝对路径

# 例:windows关于路径报错解决
open('C:\Users\Meet')  #这样程序是不识别的

# 解决方法一:
open('C:\\Users\\Meet') #这样就成功的将\进行转义   两个\\代表一个\

# 解决方法二:
open(r'C:\Users\Meet') #这样相比上边的还要省事,在字符串的前面加个小r也是转义的意思

二2.1、read()是将文件内所有

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

# read()还可以指定字符来读取
f = open("123",mode="r",encoding="utf-8")
print(f.read(5))
f.close()

# 或使用rb模式来读取字符的字节
f = open("123",mode="rb")
print(f.read(5))
f.close()

 

2.2、read()当读取大文件时,文件内容会全部显示出来,这样以来将会导致内存崩溃。

所以使用readline()一行一行的读取文件内容,但读取出来的内容后都会有\n(换行符)

# readlines()是将形成一个元素,放到列表中,将所有到内容都读出来,如果文件非常大内存会崩溃
f = open("123",mode="r",encoding="utf-8")
print(f.readlines())
f.close()

# 如果文件非常大,可使用for循环来读取
f = open("123",mode="r",encoding="utf-8")
for x in f:
    print(x)

三、写模式

3.1、w覆盖写,当在写文件的时候先打开文件清空内容,然后在进行操作。

# 当在写完文件时可以尝试刷新flush()
# 当文件不存在时,使用w模式会自动创建一个文件
f = open("123",mode="w",encoding="utf-8")
f.write("matrt.pei")
f.flush()
f.close()

3.2、wb模式

不可以指定打开文件编辑,但写文件的时候必须将字符串转换成utf-8的byte类型

f = open("123",mode="wb")
x = "matt".encode("utf-8")
f.write(x)
f.flush()
f.close(,

四、追加

a  a+  ab都是在文件末尾追加写入,无论光标在什么位置,都会追加到文件末尾

在a模式下,如果文件不存在就会创建一个新文件

f = open("123",mode="a",encoding="utf-8")
f.write("It's OK")

五、读写模式

在读写模式下,必须是先读后写,因为光标默认在开头位置。当读完后在进行写入(使用频率最高)

# r+模式
# 在r+模式下,不管读取多少内容,在写入都会在文件末尾进行操作
f = open("123",mode="r+",encoding="utf-8")
x = f.read()
f.write("111111")
f.flush()
f.close()
print(x)

六、写读模式

写读模式下,是先将文件内容清空,然后写入最后在读取

# w+模式
f = open("123",mode="w+",encoding="utf-8")
f.write("Matt.Pei")
x = f.read()
f.flush()
f.close()
print(x)

在a+追加读模式下,无论是先读还是后读,都读不到数据的

f = open("123",mode="a+",encoding="utf-8")
f.write("aaaaaaaaa")
x = f.read()
f.flush()
f.close()
print(x)

七、其他操作

7.1、seek()是将光标移动到指定n位置,移动单位为字节byte,如果是utf-8到中文需要为3到倍数

通常使用都是移动到文件开头或末尾

移动到开头:seek(0,0) 可简写为seek(0)

移动到末尾:seek(0,2) 第二个参数表示为从哪个位置进行偏移,默认为0 表示开头,1表示为当前位置,2表示文件末尾

# 当把光标移动到开头,输出结果
f = open("123", mode="r+", encoding="utf-8")
f.seek(0)
x = f.read()
print(x)
# 如果把光标先移动到开头,在移动到末尾,则没有内容
f.seek(0)
f.seek(0, 2)
y = f.read()
print(y)

f = open("123",mode="r+",encoding="utf-8")
f.write("666666")
f.flush()
print(f.tell())
f.close()

7.2、tell()是告诉光标所在到位置

f = open("123", mode="r+", encoding="utf-8")
f.seek(0)
x = f.read()
print(f.tell())

7.3、文件修改

是先将文件中到内容读取到内存中,将信息修改完成后,然后在将原文件删除,后将新文件名改成旧文件名

import os

with open("123", mode="r", encoding="utf-8")as f,\
    open("123.bak",mode="w",encoding="utf-8") as l:
    x = f.read()
    y = x.replace("666666","matt")
    l.write(y)
os.remove("123")
os.rename("123.bak","123")

 

posted @ 2019-03-13 21:58  A裴小汪  阅读(173)  评论(0编辑  收藏  举报