对文件操作流程:
1.打开文件,得到文件句柄并赋值给一个变量
2.通过句柄对文件进行操作
3.关闭文件
打开文件的模式有:
r,只读模式(默认)。
w,只写模式。【不可读;打开的文件若存在则首先清空,然后创建;不存在则创建】
a,追加模式。【不可读;不存在则创建;存在则只从末尾追加内容;】
"+" 表示可以同时读写某个文件
r+,读+追加模式,可读可写,与‘r’相同之处在于也是必须打开一个已有的文件,不同的是它可写可读,而且写与读不分先后,即随时都可进行读与写。(写为追加在文件末尾)
w+,写读模式,打开创建新文件,因此需要先把内容写进去在读。即保证文件有内容通过移动光标来读自己想要的部分。
a+,追加读写模式,打开文件方式同‘a’一样,写方式也和‘a‘一样,但是可以读。且是任意时刻读写。需要注意的是你若刚用‘a+’打开一个文件,则不能立即读,因为此时光标已经是文件末尾,除非你把光标移动到初始位置或任意非末尾的位置。
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
rU
r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
rb
wb
ab
1.文件内建函数
file_object = open(file_name, access_mode=‘r‘, buffering=-1)
file_name 是包含要打开文件名字的字符串,可以使相对路径或者绝对路径
access_mode代表文件打开模式
2.文件内建方法
(1)输入
read()直接读取字节到字符串中,最多读取给定数目个字节。若为给定(默认为-1)或者为负值,文件将会被读取至末尾。(未来可能删除)
readline()读取打开文件的一行(读取到下个行结束符之前),然后整行包括行结束符,作为字符串返回。size参数与read()用法一样,若该行超过给定size大小,会返回不完整的行。
readlines()方法读取所有行,然后作为一个字符串列表返回
(2)输出
write()内建方法的功能与read()和readline()相反,将含有文本数据或者二进制数据块的字符串写入到文件中去。
writelines()方法是针对列表的操作,它接受一个字符串列表作为参数,将其写入文件。行结束符不会被自动加入,需调用的时候在结尾手动加入 。
(3)文件内移动
seek()方法设置文件中读取的偏移量(在w+、a+中读取时常需将光标设置到想要的位置)
tell()方法可以返回当前的光标位置。
(4)文件迭代
一行一行访问文件:
for eachline in f:
readlines()方法会读取所有数据,占用内存空间
(5)其他
close()通过关闭文件来结束对它的访问;
fileno()方法返回打开文件的描述符,是一个整型;
flush()方法会直接将内部缓存区中的数据立刻写入文件,而不是被动等待输出缓冲区满;
isatty()当文件是一个类tty设备时返回Ture;
truncate()方法将文件截取到当前文件指针位置或者到给定size
3.文件内建属性
closed表示文件已经被关闭,否则为false
encoding文件所使用的编码;mode文件打开使用的访问模式;name文件名
番外:(运用flush方法)
进度条的实现
import sys,time for i in range(50): sys.stdout.write("#") sys.stdout.flush()#及时刷新输出,否则全部存在缓存中结束才输出 time.sleep(0.5)
文件修改实现:采取从一个文件读,往另一个文件写
f = open("yesterday",‘r‘,encoding="utf-8") f_new = open("yesterday.bak",‘w‘,encoding="utf-8") for line in f: if "等我歌唱" in line: line = line.replace("等我歌唱","等阿朱歌唱") f_new.write(line) f.close() f_new.close()
原文:https://www.cnblogs.com/zlg95/p/11428766.html