zoukankan      html  css  js  c++  java
  • Python的文件处理

    在Python中,文件也是一种类型的对象,类似以前学过的其他数据类型,包括文本的、图片的、音频的、视频的等等,还有不少没见过的扩展名的。

    操作文件的流程:

    #1. 打开文件,得到文件句柄并赋值给一个变量
    f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r
    
    #2. 通过句柄对文件进行操作
    data=f.read()
    
    #3. 关闭文件,谨记一定不要忘记这个
    f.close()

    1、Open()打开文件

    首先,在所在文件下创建一个文件,文件名:learn.txt,在文件里输入以下内容:

    learn python
    http://www.cnblogs.com/DreamRJF/
    This is good day!

    此文件里有三行。

    f=open("learn.txt")   #打开已有文件
    line=f.readlines()    #读取每一行内容,存放于列表中
    for i in line:
        print(i)          
    f.close()

    执行结果:

    注:Python3中运行,下同

    从打印的结果看出,每一行跟前面看到的文件内容中的每一行是一样的。只是行与行之间多了一空行,前面显示文章内容的时候,没有这个空行。或许这无关紧要,但是,还要深究一下,才能豁然。

    在原文中,每行结束有本行结束符号 ,表示换行。在for语句汇总,print line表示每次打印完line的对象之后,就换行,也就是打印完line的对象之后会增加一个 。这样看来,在每行末尾就有两个 ,即: ,于是在打印中就出现了一个空行。加上一个strip(‘ ’),去掉换行符 ,相当于去掉一行。

    f=open("learn.txt")   #打开已有文件
    line=f.readlines()    #读取每一行内容,存放于列表中
    for i in line:
        i=i.strip('
    ')   #strip('
    ')去掉
    
        print(i)         
    f.close()

    执行结果:

    特别提醒,因为当前的交互模式是在该文件所在目录启动的,所以,就相当于这个实验室和文件learn.txt是同一个目录,这时候我们打开文件learn.txt,就认为是在本目录中打开,如果文件不是在本目录中,需要写清楚路径。

    2、创建文件

    nf=open("learn0.txt",'w')
    nf.write("This is a file.
    I like program.")

    在文件夹下创建learn0.txt文件,并在learn0.txt中写入:

    This is a file.

    I like program.

    3、打开文件的模式

    模式描述
    r 以读方式打开文件,可读取文件信息。
    w 以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容
    a 以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建
    r+ 以读写方式打开文件,可对文件进行读和写操作。
    w+ 消除文件内容,然后以读写方式打开文件。
    a+ 以读写方式打开文件,并把文件指针移到文件尾。
    b 以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的。
     
       
    文件句柄 = open('文件路径', '模式')

    4、打开文件的方法

    #掌握
    f.read() #读取所有内容,光标移动到文件末尾
    f.readline() #读取一行内容,光标移动到第二行首部
    f.readlines() #读取每一行内容,存放于列表中
    
    f.write('1111
    222
    ') #针对文本模式的写,需要自己写换行符
    f.write('1111
    222
    '.encode('utf-8')) #针对b模式的写,需要自己写换行符
    f.writelines(['333
    ','444
    ']) #文件模式
    f.writelines([bytes('333
    ',encoding='utf-8'),'444
    '.encode('utf-8')]) #b模式
    
    #了解
    f.readable() #文件是否可读
    f.writable() #文件是否可读
    f.closed #文件是否关闭
    f.encoding #如果文件打开模式为b,则没有该属性
    f.flush() #立刻将文件内容从内存刷到硬盘
    f.name

    5、With的使用

    在对文件进行写入操作之后,一定要牢记一个事情:file.close(),这个操作千万不要忘记,忘记了怎么办,那就补上吧,也没有什么天塌地陷的后果。有另外一种方法,能够不用这么让人揪心,实现安全地关闭文件,就是with语句。

    with open("learn.txt",'模式') as f:
        f.write("Today is good day!")
    
    with open("learn.txt",'r') as f:
    data=f.read()
    print(data)

    这里就不用close()了。

    6、文件内光标移动

    一: 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+等模式下测试效果

    所有内容,仅作参考,可能有不足或错误之处,欢迎留言批评指正
  • 相关阅读:
    【分布式】SpringCloud(2)--SpringCloud分布式架构思想的理解
    【分布式】SpringCloud(1)--基于RestTemplate构建简易微服务调用框架
    【问题管理】-- MyBatis实体类的属性名和数据库列名不一致解决方法汇总
    【开发工具】-- 一文全面解析 Postman 工具
    【数据库】Redis(4)--Redis进阶Redis配置与持久化
    【数据库】Redis(3)--Redis事务、Jedis、SpringBoot整合Redis
    分享的面试问题,java学习教程
    怎么保证缓存和数据库一致性
    详解一条 SQL 的执行过程
    json字符串{"1-3": 29},{"8-": 50},{"8-": 50},返回 1-3天 29,大于8天 100
  • 原文地址:https://www.cnblogs.com/DreamRJF/p/8542923.html
Copyright © 2011-2022 走看看