前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >day 8 - 1 文件操作

day 8 - 1 文件操作

作者头像
py3study
发布2020-01-20 12:00:57
3710
发布2020-01-20 12:00:57
举报
文章被收录于专栏:python3python3

文件操作

注意:

1. r+ 最为常用

2.encoding 的编码格式一定要与文件编码格式一致

读取 r  rb

代码语言:javascript
复制
#在本地创建 txt 格式的文件默认使用 gbk 格式
f = open('e:/py/file.txt',mode='r',encoding='gbk')
content = f.read()
print(content,type(content))
f.close()

# b 二进制模式 bytes
f= open('e:/py/file.txt',mode='rb')
content = f.read()
print(content,type(content))
f.close()

只写  w  wb

代码语言:javascript
复制
#只写  w
#我们写入的格式为 utf-8 那么当我们查看时也要使用 utf-8 格式
#没有该文件 w 会创建文件
f = open('e:/py/test.txt',mode='w',encoding='utf-8')
f.write('正在写入...')
f.close()


#存在该文件 会覆盖写入
#即只写的逻辑为 先清空文件在写入
f = open('e:/py/test.txt',mode='w',encoding='utf-8')
f.write('已写入.')
f.close()


#wb 写入
#默认写入 bytes 类型 需要使用 encode 转换为 str 类型
#写入与文件默认格式不同的类型 如:utf-8 会自动转换
f = open('e:/py/test.txt',mode='wb')
f.write('sfssg个人是的.'.encode('gbk'))
f.close()

追加  a  ab

代码语言:javascript
复制
#追加  a
#追加与文件默认格式不同的类型 如:utf-8 不会自动转换
#默认会自动追加在文件光标的位置(即有文字的最后一位上)
f = open('e:/py/test.txt',mode='a',encoding='gbk')
f.write('追加...')
f.close()


#ab 追加
#追加与文件默认格式不同的类型 如:utf-8 不会自动转换
f = open('e:/py/test.txt',mode='ab')
f.write('方式...'.encode('utf-8'))
f.close()

读写   r+  最常用

代码语言:javascript
复制
#读写时的文件必须和源文件编码一致
#读写的位置是在读完后的最有一个字符后面
#试想在 r+ 模式下 改变读写顺序
#会在文件开头写入 每写入一个字符便会替换一个字符
f = open('e:/py/test.txt',mode='r+',encoding='utf-8')
print(f.read())
f.write("...")
f.close()


#r+ 也存在 bytes 类型 r+b
#要与源文件编码一致
f = open('e:/py/test.txt',mode='r+b')
print(f.read())
f.write("你就能看".encode('gbk'))
f.close()

写读  w+ 不常用

代码语言:javascript
复制
#还是先清除 在添加  所以没什么用
#w+ 也存在 bytes 类型 w+b
f = open('e:/py/test.txt',mode='w+',encoding='utf-8')
f.write("...")
print(f.read())
f.close()

#w+ 与 seek 调节光标
#没什么用
f = open('e:/py/test.txt',mode='w+',encoding='utf-8')
f.write("...")
f.seek(0) #光标在 0 的位置
print(f.read()) #读出结果
f.close()

追加 a+

代码语言:javascript
复制
#与 a 的区别在于 a 只可以执行一个动作
#a+ 可以执行多步
#a+ 也存在 bytes 类型 a+b
f = open('e:/py/test.txt',mode='a+',encoding='gbk')
f.write('追加...')
print(f.read())  #这样仍然读不到内容 因为光标在最后
f.close()


# a+ 与 seek
f = open('e:/py/test.txt',mode='a+',encoding='gbk')
f.write('追加...')
f.seek(0)  #光标置于 0 的位置
print(f.read())
f.close()

修改文件

代码语言:javascript
复制
#把要修改的文件和修改好的部分写入到创建好的新文件中
#然后删除源文件
with open('e:/py/test.txt',encoding='gbk')as f,\
     open('e:/py/test-bak.txt',"w",encoding='utf-8')as f2:
    for i in f:
        if '发生' in i:
            i=i.replace("发生","产生")
        f2.write(i)  #写文件

import os
os.remove('e:/py/test.txt')  #删除源文件
os.rename('e:/py/test-bak.txt','e:/py/test.txt')  #重命名文件

功能详解

read 与 seek 

代码语言:javascript
复制
#按照字符读出  read 读出来的都是字符
#字符是能看到的最小单位
#要与源文件编码一致
f = open('e:/py/test.txt',mode='r+',encoding='gbk')
print(f.read(3))
f.close()


#read 结合 seek
#seek 是按照字节来读取的
f = open('e:/py/test.txt',mode='r+',encoding='gbk')
f.seek(4)  #gbk 每个汉字 2 个字节  utf-8 每个汉字 3 个字节
print(f.read())
f.close()

tell 获取光标位置

代码语言:javascript
复制
f = open('e:/py/test.txt',mode='r+',encoding='gbk')
f.seek(4)  #按照字节定义光标位置
print(f.tell())
f.close()

移动光标读取后三个字

代码语言:javascript
复制
f = open('d:/py/file.txt',mode='r+',encoding='utf-8')
f.readline()  #读取一行使光标移动到末尾
f.seek((f.tell())-9)  #先锁定光标位置 在进行移动
print(f.read())
f.close()

readable、readline、readlines 与 truncate

代码语言:javascript
复制
f = open('e:/py/test.txt',mode='r+',encoding='gbk')
#print(f.readable())      #是否可读  返回值:true false
#print(f.readline())      #每次读一行,即一行一行的读
#print(f.readlines())     #把每一行当做一个元素,添加到 list 中
f.truncate(2)             #对源文件截取一段数据用来更改,并覆盖源文件
f.close() 

 读取第二行内容

代码语言:javascript
复制
f = open('e:/py/test.txt',mode='r+',encoding='gbk')
f.readline()     
f.seek(f.tell())
print(f.readline())
f.close()

读整个文件

代码语言:javascript
复制
#for 循环写法
#循环打印出每一行(包括换行符)
#读文件时 要分段读 因为你不知道文件有多大
f = open('e:/py/test.txt',mode='r+',encoding='gbk')
for i in f:
    print(i)
f.close()


#with 写法(自动关闭——close)
#可以同时打开多个文件
with open('e:/py/test.txt',mode='r+',encoding='gbk') as file:
    print(file.read())

with open('e:/py/test.txt',mode='r+',encoding='gbk') as file,\
open('e:/py/file.txt',mode='r+',encoding='gbk') as file2:
    print(file.read())
    print(file2.read())
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档