一、打开文件
- 打开文件常用函数open.函数open将文件名作为唯一必不可少的参数,并返回一个文件对象,如果当前目录中有一个名为somefile.txt文本文件时,可直接
f=open('smefile.txt')
打开,如果文件位于其他地方,需要指定完整路径,如果文件不存在,也可以用open函数进行创建,但需要加入文本模式参数(mode);
文本模式:
- ‘r’:读取模式
- ‘w’:写入模式
- ‘x’:独占写入模式
- ‘a’:附加模式
- ‘b’:二进制模式(与其他模式结合使用)
- ‘t’:文本模式(默认值,与其他模式结合使用)
- ‘+’:读写模式(与其他模式结合使用)
显示地指定读取模式的效果与根本不指定模式相同。写入模式让你能够写入文件,并在文件不存在时创建它。独占写入模式更进一步,在文件已存在时引发FileExistsError异常。在写入模式下打开文件,既有内容将被删除(截断),并从文件开头处开始写入;如果要在既有文件末尾继续写入,可使用附加模式。
'+'可与其他任何模式结合起来使用,表示既可读取也可写入; ‘r+’ 和’w+'之间有个重要差别:后者截断文件,而前者不会;
- 文件的基本方法(读取和写入)
如果有个文件名为f,则可f.write()或f.open()进行写入或读取
每当调用f.write(string)时,你提供的字符串都将写入到文件中既有内容的后面。
f=open('somefile.txt', 'w')
f.write('hello, ')
7 #返回写入字符串的长度
f.write('World!')
6
f.close() #使用完文件后需调用close方法关闭文件
f=open('somefile.txt', 'r')
f.read(4) ->'Hell'
f.read() ->'o, world!' #读取文件剩下的内容
方法seek(offset[, whence])将当前位置(执行读取或写入的位置)移动offset和whence指定的地方。
f=open(r'somefile.txt', 'w')
f.write('01234567890123456789')
20
f.seek(5) #表明从开始移动5个位置
5
f.write('Hello, World!')
13
f.close()
f=open('somefile.txt')
f.read() ->'0123Hello, World!89'
方法tell( )返回当前位于文件的什么位置
f=open('somefile.txt')
f.read(3) ->'012'
f.read(2) ->'34'
f.tell() ->5
**注意:当读取或写入文件时,到文件末尾时会自动关闭文件 **
3. 读取和写入行
readline( ):读取一行(从当前位置到下一个分行符的文本),调用该方法时不提供任何参数(这种情况下,将读取一行并返回它);也可提供一个非负整数,指定readline最多可读取多少个字符 。读取多行用f.readlines( )
写入行:writelines
f=open(r'somefile.txt', 'w')或 with open(r'somefile.txt', 'w') with f:
f.write('Hello, \nworld!')
f.close()
f.open('somefile.txt')
f.read()->'Hello, \nworld!' (只有直接print才能显示分行打印)
f.open('somefile.txt')
f.readline()->'Hello,\n' (f.readlines()会将文件中所有行都会打印,并以列表的形式返回)
关闭文件:
- f.close()
- 还可以用try/finally语句,并在finally语句中调用close.
#在这里打开文件
try:
#将数据写入到文件中
finally:
file.close()
三、迭代文件内容
根据迭代的类型可以分为每次一个字符或字节,每次一行或读取所以内容,实现方法一般先定义一个执行方法函数,然后用while、for循环,然后用相应函数打开、写入内容,最后可以用read/readline/readlines等方法读取即可,另外也可以用fileinput实现延迟行迭代;
#定义执行函数
def process(string):
process('processing:', string)
#创建文件并写入内容
f=open(r'filename', 'w')
f.write('123456\n678\n90')
f.close()
#迭代每一个字符
with open('filename') as f:
while True:
char=f.read(1)
if not char:
break
else:
process(char)
#迭代每次一行
with open('filename') as f:
while True:
line=f.readline()
if not line: break
process(line)
#读取所有内容
with open('filename') as f:
for char in f.read():
process(char)
或 with open ('filename') as f:
for char in f.readlines():
process(char)
#使用fileinput进行迭代
import fileinput
for line in fileinput.input(filename):
process(line)