文件操作

总结:

复制代码
#文件操作
"""
文件操作模式:
读: 默认指针位置在文件开头
        r
            read()
            read(n)#按字符读取,中英文都是一个字符
            readline()#按行读取,括号中加参数,代表读取该行多少字符
            readlines(n)#返回列表,每一行是一个元素,n表示指定行数的列表
            for循环#按行读取有换行符,一定要用.strip()处理
        rb  b模式下不允许指定encoding
        r+  读写,追加/部分覆盖
        r+b
写: 默认指针位置在文件开头
        w   没有文件创建,有文件清空写入新内容
        wb  
        w+  写读,与r+类似,但w+会清空再写入
        w+b
追加: 默认指针位置在文件末尾
        a 没有文件创建,有文件在最后面追加新内容,可seek修改指针位置追加,原内容后移
        a+  可读
        ab  不可读,写入格式需要是bytes类型
        a+b 可读
补充:英文字母、数字、特殊字符utf-8和gbk可以互相识别,因为都是引用ascii码,所以可以直接转换。
        但中文不可以,需保持编码一致。
"""
#open('file_path', encoding='', mode=''),得到文件句柄的对象,参数依此是路径、编码方式、操作权限(默认只读,可省略)
f = open('1.txt', encoding='utf-8', mode='w')#其他模式参考https://www.runoob.com/python/python-func-open.html


fileObject.truncate() #截断,从头开始,只能在可写模式下使用,省略参数从当前位置截断
fileObject.write('str') #写入文件
fileObject.seek() #移动文件指针,因python编辑文件,读写使用同一指针,写完以后如要打印验证,需要把指针移到开始位置,seek(1,0),参数一是偏移量,参数二是位置,0=初始位置,1=当前位置,2=末尾
fileObject.tell() #返回文件指针当前位置
fileObject.close() #关闭文件

#文件操作的另一种写法
with open('file_path', mode='r') as f1, open('file2_path', encoding='utf-8', mode='w') as f2:
    print(f1.read())
    print(f2.read())
复制代码

 

示例:

复制代码
#
#r
file = open('day8/1.txt', encoding='utf-8', mode='r')
print(file.read())#读取文件内容
file.close()#关闭文件,必须!!!
#read(n) 按字符读取,中英文都是一个字符
file = open('day8/1.txt', encoding='utf-8', mode='r')
print(file.read(5))
file.close()
#readline(size) 按行读取,参数是指定长度
file = open('day8/1.txt')
print(file.readline())
file.close()
#readlines() 按行读取文件所有内容,返回列表,每一行是一个元素
file = open('day8/1.txt')
print(file.readlines())
file.close()
#***for循环读取
file = open('day8/1.txt')
for line in file:
    print(line.strip())#按行读取有换行,一定记得处理
file.close()

#rb,非文字类型文件
file = open('day8/1.txt', mode='rb')
print(file.read())
file.close()
# file = open('day8/1.png', mode='rb')
# print(file.read())
# file.close()
#r+,读写,追加/部分覆盖
"""
file = open('day8/1.txt', mode='r+')
print(file.read())
file.seek(0)
file.write('233333')
file.seek(0)
print(file.read())
file.close()
"""

#r+b,不支持指定encoding
"""
file = open('day8/1.txt', mode='r+b')
print(file.read())
file.seek(0)
file.write('test11'.encode('utf-8'))
file.seek(0)
print(file.read())
file.close()
"""

#写,没有文件时创建文件写入内容; 有文件则清空再写入
#w:不能读
file = open('day8/1.txt', encoding='utf-8', mode='w')
file.write('总是记不住')
file.close()
file = open('day8/2.txt', encoding='utf-8', mode='w')
file.write('为啥总记不住')
file.close()
#w+,写读,与r+类似,但w+会全清空再写入
file = open('day8/1.txt', mode='w+')
file.write('W+模式')
file.seek(0)
print(file.read())
file.close()
#wb,不支持指定编码,不能读
file = open('day8/1.txt', mode='wb')
file.write('WB模式测试'.encode('utf-8'))
file.close()
#w+b,不支持指定编码,可读
file = open('day8/1.txt', mode='w+b')
file.write('w+b模式'.encode('utf-8'))
file.seek(0)
print(file.read())
file.close()

#追加
#a,有文件追加,没文件创建填写,不可读
#a+,可读
file = open('day8/4.txt', mode='a+')
print('位置位置', file.tell())
file.seek(0)
print('位置位置', file.tell())
file.write('test')
file.seek(0)
print(file.read())
file.close()
#ab,不可读
file = open('day8/5.txt', mode='ab')
file.write('test'.encode())
# file.seek(0)
# print(file.read())
file.close()
#a+b,可读
file = open('day8/5.txt', mode='a+b')
file.write('测试'.encode('gbk'))#写入格式需要是bytes类型,故字符串用encode转码
file.seek(0)
print(file.read())
file.close()

#非文字的文件读取写入
file = open('day8/1.jpg', mode='rb')
content = file.read()
# print(content)
file2 = open('day8/6.jpg', mode='wb')
file2.write(content)

print(file.readable())#判断是否可读
print(file.writable())#判断是否可写
file.close()
file2.close()

#fileObject.seek(offset[, whence])   文件指针移动(按字节),默认从头开始,第二个参数:0 从文件开头,1 从当前位置,2 从文件末尾
#有返回值,成功返回当前位置,失败返回-1
#fileObject.tell() 返回指针当前位置
file = open('day8/4.txt')
print(file.tell())
print('seek返回', file.seek(3))
print(file.tell())
file.seek(0, 2)
print('tell返回', file.tell())
file.read()
print('读取文件后指针位置', file.tell())
file.close()

#fileObject.truncate([size]) 文件截断,只能在可写模式下使用,省略参数从当前位置截断
file = open('day8/4.txt', mode='r+')
print('r模式下默认指针位置', file.tell())
file.truncate()
print(file.tell())
file.close()
复制代码

 

posted @   尐少  阅读(108)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示