python学习036-----python之文件(一):文件的读取和写入

系统 468 0

【打开文件】
 我们 使用open()函数来打开文件 ,并返回文件对象。open()的参数有很多,如下:

这些参数中的第一、二个参数是重点。

第一个参数 是传入文件名: 若只有文件名,不带路径的话,python会在当前路径下查找该文件并打开。

第二个参数 是文件的打开模式:其有以下几种参数:
===========================================================
1. r     以只读方式打开文件( 默认 )。
2. w    以写入的方式打开文件,会覆盖已存在的文件。
3. x     如果文件已经存在,使用此模式打开将引发异常。 
4. a     以写入模式打开,如果文件已存在,则在末尾追加写入。
5. b     以二进制模式打开文件。
6. t      以文本模式打开文件( 默认 )
7. +     可读写模式( 添加到其他模式中使用 )
8. U     通用换行符支持。
===========================================================

下面我们 使用open()来打开一个文件

            
              f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test.txt')
print( f )
            
          

运行结果:

【注意】: 打开文件时,第一个参数为文件路径,此时路径中的斜杠要写成双斜杠。因为单斜杠
                会转义,从而导致输入的路径无效。另外直接用open()获取的是文件对象,如需读取,
                还需要使用下面介绍的文件对象方法。

【文件对象方法】
对上面的文件对象进行读取和写入的方法
===========================================================
f.close()                  关闭文件( 如果有文件写入操作,应该在写入后关闭
                              文件,如果不关闭,若中途断电,那么之前写入的数
                              据就不会被保存了 )
f.read( n )               从文件读取 n 个字符,当未给定 n 或给定负值的时
                              候,读取剩余的所有字符,然后作为字符串返回
f.readline()             以写入模式打开,如果文件存在,则在末尾追加写入
list()                       将文件对象转化为列表对象,进行迭代读取
f.write( str )            将字符串str写入文件
f.writelines( seq )   向文件写入字符串序列seq,seq应该是一个返回字符
                               串的可迭代对象
f.seek(offset,from) 在文件中移动文件指针,从from( 0代表文件起始位置,
                              1代表当前位置,2代表文件末尾 )便宜offset个字节
f.tell()                     返回当前在文件中的位置      
===========================================================
-------------------------------------------------------------------------------------------------------
read()方法
直接读取整个文件,将所有内容以字符串形式输出。read不能对单行数据进行分离操作。它占
用内存很大。
【思考】:下面的代码会读出什么

            
              a = f.read()
b = f.read(-1)
c = f.read(10)
print( a )
print( b )
print( c )
'''
乍一看,会读出如下数据:
this is a test for the function of 'open()'
this is a test for the function of 'open()'
this is a 
【实际上】输出的是:
this is a test for the function of 'open()'


'''
            
          

【解析】:
后两行空着的原因是:
第一行中的read()函数已经读完了所有的字符,指针已经移动到了字符串末尾,所以再次读取已经
没有东西可读了。想要再次读取,只能重新打开文件( 用open()函数 )。根据以上内容便可推知以下
代码的输出结果了:

            
              f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test.txt')
b = f.read(5)
print( b )           #【输出】:this
c = f.read(10)
print( c )           #【输出】:is 
            
          

readline()方法:
readline()每次读取(下)一行数据,可以对数据进行分离操作。它占用内存很小。

            
              f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test1.txt')
d = f.readline()
e = f.readline()
g = f.readline()
h = f.readline()
print(d)  #【输出】111111111111111111111111111
print(e)  #【输出】222222222222222222222222222
print(g)  #【输出】333333333333333333333333333
            
          

readlines()方法:
readlines()一次性读取所有行文件,可以利用遍历的方法对每一行数据进行处理。占用内存比较大。

            
              f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test1.txt')
m = f.readlines()
print(m)
print()
#【输出】:['111111111111111111111111111\n', '222222222222222222222222222\n', '333333333333333333333333333']
            
          

上述三者性能比较:
以上三者中,read()速度最快,但功能最简单,有时不能满足需求。剩余两者功能类似,但是readlines()
明显比readline()速度快很多。

【文件内容的遍历】
谈到遍历文件内容,大家一般会想到如下的方法:

            
              f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test1.txt')
lines = list(f)
for each_line in lines:
    print(each_line)
#【输出】:
#1111111111111111111111
#2222222222222222222222
#3333333333333333333333
            
          

但是,上面的方法实际上效率非常低,当数据非常多的时候,效率会极其低下。所以我们 应该使用
如下的方法,亦能达到同样的效果。

            
              f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test1.txt')
for line in f:
    print(line)
            
          

这样的方法,简洁且效率高。

【文件的写入】
对文件进行写入要首先确保文件状态是可写入的('w'),前面的文件默认状态是只读('r'),所以这里我
们新创建一个可写入的文档进行操作。

            
              f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test2.txt', 'w')
a = f.write( '自律使我自由!' )
print( a )
#【输出】:7 (说明我们写入了7个字符)
f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test2.txt')
mess = f.read()
print( mess ) #【输出】:自律使我自由! 说明内容已经被成功写入了。
            
          

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请请扫描上面二维码支持博主1元、2元、5元等您想捐的金额吧,狠狠点击下面给点支持吧

发表我的评论
最新评论 总共0条评论