#方法一,句柄操作 f=open(‘a.txt‘,‘r‘,encoding=‘utf-8‘)#打开文件,获得文件句柄 data=f.read() #通过句柄对文件进行操作 print(data) f.close() #关闭文件 #方法二,上下文管理 with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as f: a=f.read() print(a)
#遍历全文本:方法一 fname=input("请输入要打开的文件名称:") fo=open(fname,‘r‘) txt=fo.read() fo.close()#一次读入,统一处理 #遍历全文本:方法二 fname=input("请输入要打开的文件名称:") fo=open(fname,‘r‘) txt=fo.read(2) while txt!="": txt=fo.read(2) fo.close()#按数量读入,逐步处理
#方法一 fname=input("请输入要打开的文件名称:") fo=open(fname,‘r‘) txt=fo.read(2) for line in fo.readlines(): print(line) fo.close() #一次读入,分行处理 #方法二 fname=input("请输入要打开的文件名称:") fo=open(fname,‘r‘) for line in fo: print(line) fo.close() #一次读入,逐行处理
1,文件操作后记得关闭文件,否则占用内存
2,如果没有为句柄指定编码,那么打开文件用默认编码。windows下默认gbk;linux下默认utf-8
f=open(‘文件路径‘,‘操作模式‘,encoding=‘指定编码‘)
‘r‘ open for reading (default)
‘w‘ open for writing, truncating the file first
‘x‘ create a new file and open it for writing
‘a‘ open for writing, appending to the end of the file if it exists
‘b‘ binary mode
‘t‘ text mode (default)
‘+‘ open a disk file for updating (reading and writing)
‘U‘ universal newline mode (deprecated)

file.close() 关闭文件。关闭后文件不能再进行读写操作。 file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。 file.isatty() 如果文件连接到一个终端设备返回 True,否则返回 False。 file.next() 返回文件下一行。 * file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。 * file.readline([size]) 读取整行,包括 "\n" 字符。 * file.readlines([sizeint]) 读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。 * file.seek(offset[, whence]) 设置文件光标当前位置,0-开头;1-当前;2-文件结尾 file.tell() 返回文件当前位置。 file.truncate([size]) 截取文件,截取的字节通过size指定,默认为当前文件位置。 * file.write(str) 将字符串写入文件,返回的是写入的字符长度。 * file.writelines(sequence) 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 #掌握 f.read() #读取所有内容,光标移动到文件末尾 f.readline() #读取一行内容,光标移动到第二行首部 f.readlines() #读取每一行内容,存放于列表中 f.write(‘1111\n222\n‘) #针对文本模式的写,需要自己写换行符 f.write(‘1111\n222\n‘.encode(‘utf-8‘)) #针对b模式的写,需要自己写换行符 f.writelines([‘333\n‘,‘444\n‘]) #文件模式 f.writelines([bytes(‘333\n‘,encoding=‘utf-8‘),‘444\n‘.encode(‘utf-8‘)]) #b模式 #了解 f.readable() #文件是否可读 f.writable() #文件是否可读 f.closed #文件是否关闭 f.encoding #如果文件打开模式为b,则没有该属性 f.flush() #立刻将文件内容从内存刷到硬盘 f.name
一: read(3):
1. 文件打开方式为文本模式时,代表读取3个字符
2. 文件打开方式为b模式时,代表读取3个字节
二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate
注意:
1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果
import time with open(‘test.txt‘,‘rb‘) as f: f.seek(0,2) while True: line=f.readline() if line: print(line.decode(‘utf-8‘)) else: time.sleep(0.2)
方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)
import os with open(‘a.txt‘,‘r‘) as read_f,open(‘.a.txt.swap‘,‘w‘) as write_f: data=read_f.read() data=data.replace(‘old‘,‘new‘) write_f.write(data) os.remove(‘a.txt‘) os.rename(‘.a.txt.swap‘,‘a.txt‘)
方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件
import os with open(‘a.txt‘,‘r‘) as read_f, open(‘.a.txt.swap‘,‘w‘) as write_f: for line in read_f: line=line.replace(‘old‘,‘new‘) write_f.write(line) os.remove(‘a.txt‘) os.rename(‘.a.txt.swap‘,‘a.txt‘)
原文:https://www.cnblogs.com/lzzone/p/11227093.html