python 文件操作

一、文件操作

1.1 文件操作三部曲

  1. 打开文件
  2. 对文件句柄进行相应的操作
  3. 关闭文件

1.2 、文件的功能模式

  • 读,四种模式,r rb r+ r+b
  • 写,四种模式 , w wb w+ w+b
  • 追加,四种模式, a ab a+ a+b
  • 相映的功能,对文件句柄的操作,read , read(n) , readlines() , write(), tell() 、seek() flush

二、读取文件

2.1、读取文件所有内容

f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
content = f1.read()
print(content)
f1.close()

# open 内置函数
# f1,变量,文件句柄,对文件的任何操作都得通过文件句柄完成,在内存当中只占用一行文件的数据
# encoding 可以不写,不写得默认编码本是操作系统得默认编码
# f1.close()关闭文件句柄

2.2、按照字符读取

f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
content = f1.read(5) # 读取光标后五个字符
print(content)
f1.close()

2.3、按照行读取

f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
print(f1.readline())
print(f1.readline())
f1.close()


f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
print(f1.readlines())
f1.close()
# f1.readline() 逐行读取
# f1.readlines() 返回一个列表,列表中的每个元素是源文件的每一行

2.4、for循环逐行读取文件

f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
for line in f1:
    print(line)
f1.close()

2.5、 rb,操作非文本的文件,如图片,视频,音频

f1 = open(r'C:Users19595PicturesDesktopBackgroundaa.jpg', mode='rb')
content = f1.read()
print(content)
f1.close()

三、文件写入操作

3.1、w 写入模式

f = open('文件的写',encoding='utf-8',mode='w')
f.write('随便写一点')
f.close()

# 如果文件存在,先清空源文件内容,在写入新内容,如没有则新创建

3.2、wb写入模式,非文本文件

f1 = open(r'C:Users19595PicturesDesktopBackgroundaa.jpg', mode='rb')
content = f1.read()
# print(content)
f1.close()

f = open('bb.jpg',mode='wb')
f.write(content)
f.close()

# 以二进制读取aa.jpg图片,再将读取后的二进制写入到bb.jpg形成新图片文件

3.3、a 追加内容

f = open('bb.txt',encoding='utf-8',mode='a')
f.write('我最帅')
f.close()

# 没有文件创建文件,追加内容,有文件再文件末尾追加内容

3.4、r+ 读写,先读后写,在光标后添加内容

f = open('bb.txt',encoding='utf-8',mode='r+')
content = f.read()
print(content)
f.write('我最帅')
f.close()

四、其他功能

4.1 、tell() 获取光标的位置,单位为字节

f = open('bb.txt',encoding='utf-8',mode='r')
print(f.tell())
content = f.read()
print(content)
print(f.tell())
f.close()

4.2、 seek() 调整光标的位置

f = open('bb.txt',encoding='utf-8',mode='r')
f.seek(82) #移动光标的82字节的位置
print(f.tell())
content = f.read()
print(content)
print(f.tell())
f.close()

4.3、flush 强制刷新

f = open('文件的写',encoding='utf-8',mode='w')
f.write('随便写一点')
f.flush()
f.close()

# 在write后跟一个flush强制保存

五、with 打开文件的另一种方式

with open('bb.txt',encoding='utf-8',mode='r') as f:
    print(f.read())


with open('bb.txt', encoding='utf-8', mode='r') as f, open('文件的写', encoding='utf-8', mode='w') as f1:
    print(f.read())
    f1.write('我最帅')
    
# 优点,不用每次手动关闭文件,可以同时操作多个文件

六、文件的修改操作

  1. 以读得模式打开源文件

  2. 以写得模式创建一个新文件

  3. 将源文件的内容读出来修改成新内容,写入新文件

  4. 将源文件删除

  5. 将新文件从命名成源文件

# low版,缺点是同时加载文件所有内容,文件太大是,内存会比较紧张
import  os
# 1. 以读得模式打开源文件
# 2. 以写得模式创建一个新文件
with open('bb.txt',encoding='utf-8',mode='r') as f, 
    open('bb.txt_bak',encoding='utf-8',mode='w') as f1:

# 3.将源文件的内容读出来修改成新内容,写入新文件
    old_content = f.read()
    new_content =  old_content.replace('我最帅','我牛逼')
    f1.write(new_content)
# 4. 将源文件删除
# 5. 将新文件从命名成源文件
os.remove('bb.txt')
os.rename('bb.txt_bak','bb.txt')




# 改进版, 逐行循环,逐行修改
import  os
# 1. 以读得模式打开源文件
# 2. 以写得模式创建一个新文件
with open('bb.txt',encoding='utf-8',mode='r') as f, 
    open('bb.txt_bak',encoding='utf-8',mode='w') as f1:

# 1.将源文件的内容读出来修改成新内容,写入新文件
    for line in f:
        # 逐行循环,逐行修改
        new_line =  line.replace('我牛逼','我最帅')
        f1.write(new_line) 
os.remove('bb.txt')
os.rename('bb.txt_bak','bb.txt')
原文地址:https://www.cnblogs.com/jiangjunwang/p/13382699.html