Python3 文件操作

#11 文件操作
#文件操作基本流程
#1.打开文件,得到文件句柄并赋值给变量 f = open('')
#2.通过获得的句柄对文件进行操作 data = f.read()读文件
#3关闭文件 f.close()

#windows的文本文档默认的编码是ansi编码,直接打开会乱码
#文件打开模式
#'r' 默认的打开方式,只读
#'w' 打开写入,首先截断文件(若文件不空,首先清空文件)
#'x' 创建一个新文件,只写
#'a' 只写打开文件,如果文件不空追加到文件末尾
#'b' 二进制模式
#'t' 文本模式 也是默认的模式
#'+' 打开磁盘文件准备更新(读和写)
#'U' 通用换行模式(不建议使用)

#read()方法不一定能全读出来, 只做一次系统调用
#注意:python只能将字符串写入文件

#总结先写前头,如果想要字符数据并且观看内容使用r模式,如果不需要观看只需rb便可。
#在python3中对于seek()函数,所操作的文件必须是rb

f = open ( ' test ' , encoding = ' utf8 ' )
data = f. read () #将文件内容直接加载到内存中
print (data)

#只读n个字符
f. seek ( 0 ) #文件指针指到行首
data = f. read ( 10 ) #读10个字节
print (data)

#只读前五行
f. seek ( 0 )
for i in range ( 5 ):
print (f. readline ())

#以列表的方式读取整个文件,文件大内存容易出问题,慎用!!!!!!!!!!注意注意!!
f. seek ( 0 )
print ( " 以列表的方式读取整个文件 " )
for line in f. readlines ():
print (line)
f. close ()

#读取一行
with open ( ' test ' , encoding = ' utf8 ' ) as f:
print (f. readline ())

#写入文件,参数为字符串
with open ( ' test ' , ' a+ ' , encoding = ' utf8 ' ) as f:
f. write ( ' 嗯! 你说的很对!!我同意 ' )

#写入文件,参数是序列,比如列表,元组等。
with open ( ' test ' , ' a+ ' , encoding = ' utf8 ' ) as f:
f. writelines ([ ' 小子 ' , ' ' , ' 真聪明! ' ])

#判断文件是否是这个Return whether this is an 'interactive' stream
with open ( ' test ' , ' r+ ' , encoding = ' utf8 ' ) as f:
ret = f. isatty ()
read = f. readable ()
print ( ' 判断是否可读: ' , read)
print (ret)
#指定/指出文件中指针的位置
with open ( ' test ' , ' r ' , encoding = ' utf8 ' ) as f:
f. read ( 15 )
print (f. tell ()) #指出文件指针的位置
f. seek ( 20 )
print (f. tell ()) #指定文件指针


#截断文件数据,仅保留指定之前的数据(字节数)
with open ( ' test ' , ' r+ ' , encoding = ' utf8 ' ) as f:
f. truncate ( 0 )

#下面是一些更加详细的补充,以及关于上述概念的一些更加容易理解的解释,
#读者可以将代码分块,粘贴进visual studio code或者其他环境,进行分析
#文件操作
#文件读写过程操作类似于手动操作windows下文件过程
#首先打开文件,之后对文件进行读写,最后关闭文件。

#open()函数参数,文件名,操作模式,编码方式
#文件名 = 全路径(绝对路径或者相对路径 默认为当前路径)
#打开模式:
# w 只写模式打开,清空(不是覆盖) + 写 注:数据库操作慎用
# r 只读 文件不存在则报错
# a 在文件末尾追加 注:文件不存在则创建一个新文件
# wb 二进制写
# rb 二进制读
# ab 二进制追加
# w+ 读写模式
# r+
# a+
# wb+
# rb+
# ab+
#以下三个函数测试w,r,a作用
# f = open('test', 'w', encoding='utf8') #文件打开以后,
# #会在内存生成一段数字(文件句柄或者文件对象)
# f.write('Hello world!')
# f.close()

# fread = open('test', 'r', buffering=-1, encoding='utf-8')
# content = fread.read()
# print('读文件' + ' ' + content)
# fread.close()

# fappend = open('test_append', 'a', encoding='utf-8')
# fappend.write("嘻嘻嘻")
# fappend.close()

#copy一个文件到当前路径
#1.先打开目标图片
#2.读图片内容(binary)
#3.在当前文件建立一个文件
#4.将图片内容写入文件
#5.关闭文件

#写二进制文件
# fresource = open(r'C:\Users\H\Desktop\pythonbasis\FileOperation\ez.jpg', 'rb')
# fdestanation = open('ezcopy1.jpg', 'wb')
# bbate = fresource.read()
# print(bbate) #将会打印二进制数
# fdestanation.write(bbate)
# fresource.close()
# fdestanation.close()

#视频,图片,文件很多以二进制方式保存的
#抛出一个问题,读写文件是二进制模式更快,还是非二进制模式更快呢?

#执行写操作时,首先将内容放入缓冲区,之后再进行写操作。
#read()函数一次性将文件读取,加载到内存中,在处理大文件时不适用

#读取一行
# fline = open('lines', 'r')
# line = fline.readline()
# print(line)
# fline.close()

#通过一行一行读取整个文件
# fline = open('lines', 'r')
# for line in fline:
# print(line)
# fline.close()

#一行一行写
l = [ ' 1 ', ' 2 ', ' 3 ' ]
fwriteline = open ( ' write ' , ' w ' )
for item in l:
fwriteline. write (item + ' \n ' )
fwriteline. close ()

#readlines()函数,将文件内容按行的模式以列表的形式返回
# flines = open("lines", 'r')
# print(flines.readlines())
# flines.close()

#只想读取中间某几行tell() 返回当前文件操作指针所在位置
# with open('lines', 'r') as f:
# f.readline()
# f.seek(0) #将文件操作指针移动到指定位置
# print(f.tell())

#如果想要在某个位置插入一段内容,首先需要将文件读取并用一个数据结构
#存下来,之后操作该数据再执行写入
#文件操作仍有许多内容,大家可以根据以上的基础进行跟深入的研究。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值