with opne()

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

1、r读模式
# rb模式操作的文件是非文字类的文件:图片,视频,音频等等。
# read() read(n) readline() readlines() for循环

f1 = open('./zwc.txt', encoding='utf-8', mode='r')
content = f1.read()
print(content)
f1.close()

# r模式下五种读取方式:
read() 全部读取出来
read(n) 读n个字符

在r  模式下按照字符读取
在rb 模式下按照字节读取

readline() 按行读取
readlines() 返回一个列表,列表中的每个元素是原文件的每行的数据。

for循环
f1 = open('./zwc.txt', encoding='utf-8', mode='r')
for line in f1:
    print(line.strip())
f1.close()


2、r+读写模式
# 先读后写(后追加)
# 在r+读写模式下,应该先读后写入。
f1 = open('./zwc.txt', encoding='utf-8', mode='r+')
content = f1.read()
print(content)
f1.write('zhouwanchun')
f1.close()

如果我就要先写后读呢?
光标,指针
f1 = open('./zwc.txt', encoding='utf-8', mode='r+')
f1.seek(0,2)  # 把光标调整到最后
f1.write('zhouwanchun')
f1.seek(0)  # 把光标调整到最开始
content = f1.read()
print(content)
f1.close()


3、写模式:w、wb、w+、w+b
# 没有文件创建文件写入,有文件清空原文件内容写入新内容。
# w模式必须是以字符串的内容写入。
f1 = open('./zwc.txt', encoding='utf-8', mode='w')
f1.write('mysql3306')
f1.close()

w+ :写读模式
f1 = open('./zwc.txt', encoding='utf-8', mode='w+')
f1.write('mysql3307')
f1.seek(0)
print(f1.read())
f1.close()


4、a追加模式
# 追加模式:a ab a+ a+b
# 没有文件创建文件追加内容,有文件在原文件的末尾追加新内容。
f1 = open('./zwc.txt', encoding='utf-8', mode='a')
f1.write('mysql3306')
f1.close()


5、其他操作方法
f1.fileno()
f1.flush() # 强制保存 相当于ctrl + s
f1.readable() f1.writeable() # 判断一个文件句柄是否可读,可写。
f1.tell() # 获取光标位置
f1.seek(3) # 调整光标位置
f1.truncate(3) # 只能在可写的模式下 截取原文件。只能从头截取,不能调整光标截取一部分。不能在w模式下使用truncate。


6、另一种打开文件的操作方式
# 自动关闭文件句柄
# 同一语句可操作创建多个文件句柄
with open('./file1', encoding='utf-8', mode='r') as f1, \
        open('./file2', encoding='utf-8', mode='w') as f2:
    print(f1.read())
    f2.write('666')


7、文件的改:
# 方法一:
# 1.以读的模式打开原文件,产生文件句柄f1
# 2.以写的模式打开新文件,产生文件句柄f2
# 3.读取原文件 将原文件的内容改写成新内容写入新文件。
import os
with open('./1.log', encoding='utf-8', mode='r') as f1,\
    open('./1.log.bak', encoding='utf-8', mode='w') as f2:
    old_content = f1.read()
    new_content = old_content.replace('mysql3306', 'mysql3307')
    f2.write(new_content)
# 4.删除原文件。
os.remove('./1.log')
# 5.将新文件重命名成原文件。
os.rename('./1.log.bak', './1.log')


# 升级版
import os
with open('./1.log', encoding='utf-8', mode='r') as f1,\
    open('./1.log.bak', encoding='utf-8', mode='w') as f2:
    for line in f1:
        new_line = line.replace('mysql3306', 'mysql3307')
        f2.write(new_line)
os.remove('./1.log')
os.rename('./1.log.bak', './1.log')

 

posted @ 2021-02-21 22:39  捧花大王  阅读(54)  评论(0编辑  收藏  举报