第11章 文件

一、打开文件
  1. 打开文件常用函数open.函数open将文件名作为唯一必不可少的参数,并返回一个文件对象,如果当前目录中有一个名为somefile.txt文本文件时,可直接f=open('smefile.txt')打开,如果文件位于其他地方,需要指定完整路径,如果文件不存在,也可以用open函数进行创建,但需要加入文本模式参数(mode);
    文本模式:
  • ‘r’:读取模式
  • ‘w’:写入模式
  • ‘x’:独占写入模式
  • ‘a’:附加模式
  • ‘b’:二进制模式(与其他模式结合使用)
  • ‘t’:文本模式(默认值,与其他模式结合使用)
  • ‘+’:读写模式(与其他模式结合使用)
    显示地指定读取模式的效果与根本不指定模式相同。写入模式让你能够写入文件,并在文件不存在时创建它。独占写入模式更进一步,在文件已存在时引发FileExistsError异常。在写入模式下打开文件,既有内容将被删除(截断),并从文件开头处开始写入;如果要在既有文件末尾继续写入,可使用附加模式。
    '+'可与其他任何模式结合起来使用,表示既可读取也可写入; ‘r+’ 和’w+'之间有个重要差别:后者截断文件,而前者不会;
  1. 文件的基本方法(读取和写入)
    如果有个文件名为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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值