python文件的操作第8 天

文件的读  单纯读 不更改

f = open(r'd:\社会人.txt',mode='r',encoding='utf-8')

content = f.read()

print(content)

close()

总体格式:f: 就是一个变量,一般都会将它写成f,f_obj,file,f_handler,fh,等,它被称作文件句柄

为open:是Python调用的操作系统(windows,linux,等)的功能。

 r'd:\社会人.txt': 这个是文件的路径。  同一目录下"社会人"

mode: 就是定义你的操作方式:r为读模式。

encoding: 不是具体的编码或者解码,他就是声明:此次打开文件使用什么编码本。一般来说:你的文件用什么编码保存的,就用什么方法打开,一般都是用utf-8(有些使用的是gbk)。

f.read():你想操作文件,比如读文件,给文件写内容,等等,都必须通过文件句柄进行操作。

2.1.1 read()

read()将文件中的内容全部读取出来;弊端 如果文件很大就会非常的占用内存,容易导致内存奔溃

read(n)读取的时候指定读取到什么位置,在r模式下,n按照字符读取。.

readline()读取每次只读取一行,注意点:readline()读取出来的数据在后面都有一个\n

f = open(r'path1/社会人.txt',mode='r',encoding='utf-8')
msg4 = f.readline().strip()

f.close()

print(msg4)

readlines() 返回一个列表,列表里面每个元素是原文件的每一行,如果文件很大,占内存,容易崩盘。  待续

f = open('log',encoding='utf-8')
print(f.readlines())
f.close()
# 结果['666666\n', 'fkja l;\n', 'fdkslfaj\n', 'dfsflj\n', 'df;asdlf\n', '\n', ]

最好的方式 可以通过for循环去读取,文件句柄是一个迭代器,他的特点就是每次循环只在内存中占一行的数据,非常节省内存。f = open('../path1/社会人.txt',mode='r',encoding='utf-8')

for line in f:

    print(line)     #这种方式就是在一行一行的进行读取,它就执行了下边的功能,代码如下

f = open('../path1/弟子规',mode='r',encoding='utf-8')

for line in f:

    print(line) #这种方式就是在一行一行的进行读取,它就执行了下边的功能

print(f.readline())

print(f.readline())

print(f.readline())

print(f.readline())

f.close()

注意点:读完的文件句柄一定要关闭

 close(): 关闭文件句柄(可以把文件句柄理解成一个空间,这个空间存在内存中,必须要主动关闭)。

rb模式:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。记住下面讲的也是一样,带b的都是以二进制的格式操作文件,他们主要是操作非文字文件:图片,音频,视频等,并且如果你要是带有b的模式操作文件,那么不用声明编码方式。

文件的写     如果文件存在,利用w模式操作文件,先清空原文件内容,在写入新内容。

如果文件不存在,利用w模式操作文件,那么它会先创建文件,然后写入内容.

非文本格式   rb的模式将一个图片的内容以bytes类型全部读取出来,然后在以wb将全部读取出来的数据写入一个新文件,这样我就完成了类似于一个图片复制的流程   先转化 在写人

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

如果文件不存在,利用a模式操作文件,那么它会先创建文件,然后写入内容。      代码待续

r+ 读写模式,w+写读模式

r+: 打开一个文件用于读写。文件指针默认将会放在文件的开头。注意:如果你在读写模式下,先写后读,那么文件就会出问题,因为默认光标是在文件的最开始,你要是先写,则写入的内容会讲原内容覆盖掉,直到覆盖到你写完的内容,然后在后面开始读取。     代码后续

6.1 read(n)

 1. 文件打开方式为文本模式时,代表读取n个字符

    2. 文件打开方式为b模式时,代表读取n个字节

重要   eek(n)光标移动到n位置,注意: 移动单位是byte,所有如果是utf-8的中文部分要是3的倍数

通常我们使用seek都是移动到开头或者结尾

移动到开头:seek(0)

移动到结尾:seek(0,2) seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾 代码如下

f = open("小娃娃", mode="r+", encoding="utf-8")

f.seek(0) # 光标移动到开头

content = f.read() # 读取内容, 此时光标移动到结尾

print(content)

f.seek(0) # 再次将光标移动到开头

f.seek(0, 2) # 将光标移动到结尾

content2 = f.read() # 读取内容. 什么都没有

print(content2)

f.seek(0) # 移动到开头

f.write("张国荣") # 写入信息. 此时光标在9 中文3 * 3个 = 9

f.flush()

f.close()

文件修改

式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)

式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件  例题如下待续

猜你喜欢

转载自www.cnblogs.com/saoqiang/p/10847628.html