python_文件操作

# 文件操作

'''
#  条件:
    文件名称:  档案.txt
    路径:D:档案.txt
    编码方式:utf-8
    操作方式:读、写、追加、读写、写读..........
    以什么编码方式储存的,就要以什么编码方式操作



# 文件只读 :r
# open('d:档案.txt',mode = 'r',encoding='utf-8')   这是一个对象
f = open('d:档案.txt',mode = 'r',encoding='utf-8')    #  把这个对象赋给f
# f.read     # 这个对象的操作 一次性读出来,文件太大的话容易占满内存
h = f.read()    # 把这个对象操作赋给h
print(h)      #  打印出
f.close()

# 注:mode = 'rb' 时可以不加编码方式 它是以bytes二进制的形式打开文件,处理非文字的文件


# 文件只写 w      如果有这个文件会将源文件内容清空了,在写;没有会创建一个写
f = open('d:log.txt',mode='w',encoding='utf-8')
f.write("我是里面的内容")
f.close()

如果是wb 二进制方式写入
f = open('d:log.txt',mode='wb')    #  可以不加编码方式
f.write("我是里面的内容".encode('utf-8'))     # 写入的时候要加encode
f.close()


# 文件追加
f = open('d:档案.txt',mode='a',encoding='utf-8')
f.write("我是里面的内容")
f.close()

# ab 二进制方式
f = open('d:档案.txt',mode='ab')
f.write("我是里面的内容".encode('utf-8'))
f.close()


# r+ 模式下 读写
f = open('d:档案.txt',mode='r+',encoding='utf-8')
print(f.read())  # 只能读出原文章,光标定位原文章后面写入新文章
f.write('hello world')
f.close()

# r+ 读写
f = open('d:档案.txt',mode='r+',encoding='utf-8')
f.write('hahahahaha')  # 光标会直接定位到最开始,写入的新文章会覆盖掉原文章
print(f.read())
f.close()

# r+b  # 以bytes类型 就是二进制
f = open('d:档案.txt',mode='r+b')
print(f.read())
f.write('hello world'.encode('utf-8'))
f.close()

# w+ 写读
f = open('d:档案.txt',mode='w+',encoding='utf-8')
f.write('hhhhhhh')
f.seek(0)          # 把光标调到0的位置
print(f.read())
f.close()
# w+b  不在阐述

# a+ 追加读
f = open('d:档案.txt',mode='a+',encoding='utf-8')
f.write('eeeee')
f.seek(0)
print(f.read())    # 如果a不加+,f.read() 是无效的
f.close()


# 功能详解

f = open("d:档案.txt",mode="r+",encoding='utf-8')
print(f.read(2))  # 可以去定位去读,单位是字符
f.seek(2)  # 是按照字节定光标位置
print(f.tell())  # 获取光标当前的位置
f.close()

# 我只想读后三位   调节光标读取 光标->文件指针
f = open('d:档案.txt',mode='a+',encoding='utf-8')
f.write('lkj')
count = f.tell()  # 找到光标位置,肯定在最后一位
print(count)
print(type(count))
f.seek(count-7)  # 然后指定光标到某个位置
f.readable() # 是否可读 返回flase true f.readline() # 一行一行读 缺点 不知道在哪结束 f.readlines() # 每一行当成列表中的一个元素,添加到list中 也是一次性读完 缺点 文件太大的话 容易占满内存 f.truncate() # 对原文件进行截取 print(f.read()) f.close() # 想看一个文件内容 for循环打印出来 f = open('d:档案.txt',mode='r+',encoding='utf-8') # r+ 是比较常用 因为他也能追加 for line in f: print(line) f.close() # 有时候读的时候忘记最后关闭文档,忘写.close 下面这个自动读取关闭 with open('d:档案.txt',mode='r+',encoding='utf-8') as f: print(f.read()) # 也可以多行去操作 with open('d:档案.txt',mode='r+',encoding='utf-8') as f, open('d:log.txt',mode='w+',encoding='utf-8') as h: print(f.read()) '''

 

# 文件修改
  # 文件是不能修改的
  # 要想修改 只能读 重新写 然后把以前的删掉
  
# 打开方式mode不写默认是r,
with open('学习.py',encoding='utf-8') as f,
        open('学习.bak','w',encoding='utf-8') as f2:
    for i in f:
        if '嘿嘿嘿' in i:
            i = i.replace('嘿嘿嘿','hello')
        # 写文件
        f2.write(i)

import os
os.remove('学习.py')  # 删除文件
os.rename('学习.bak','学习')  # 重命名文件

 

原文地址:https://www.cnblogs.com/niunai/p/10391362.html