• 第七章 Python文件操作


     欢迎您进入老吴的博客,如有联系请加我QQ:2367214814

    7.1  初识文件操作:

    大家应该听说过一句话:“好记性不如烂笔头”。

    不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,“哭都没地方哭了”可见,在把数据存储起来有做么大的价值。

    7.1.1  常见的文件

     

    7.1.2 文件的作用

    就是把一些数据存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。

    7.2文件的打开与关闭

    想一想:

    如果想用word编写一份简历,应该有哪些流程呢?

    1、打开word软件,新建一个word文件

    2、写入个人简历信息

    3、保存文件

    4、关闭word软件

    同样,在操作文件的整体过程与使用word编写一份简历的过程是很相似的

    1、打开文件,或者新建立一个文件

    2、读/写数据

    3、关闭文件

    7.2.1 写文件:

    python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件

    #  相对路径-写入文件

    open(文件名,访问模式) ;   open里面有两个参数。

    示例如下:

    先创建一个test.py文件,利用Python代码打开这个文件。

    f = open('test.txt', 'w')  open有返回值 找个变量接收 。
    # 找个变量保存open的返回值,任何操作通过f操作; "w"--》写文件; ‘rrrrrrrrrr'-》只能读
    f.write("hello,大家好")
    f.close()   # 关闭文件

     

     

    错误分析:当我们打开一个文件,可是中文出现乱码,这是可能因为我们文件使用UTF-8进行编辑,而Windows默认使用GBK编码格式,所以导致打开文件时出现乱码

    解决方法一:在打开的文本中解决(治标不治本)。点击图中右下角的UTF-8,选择GBK,在弹出的窗口中选择Reload(重载)

     

     

     

    解决方法二:在编辑文本时,设置指定的编码格式。

     

    查看结果:

     

    访问模式

    说明

    r

    以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。如果文件不存在会崩溃。文件必须存在

    w

    打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    a

    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

    rb

    以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

    wb

    以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    ab

    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

    r+

    打开一个文件用于读写。文件指针将会放在文件的开头。

    w+

    打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    a+

    打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

    rb+

    以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

    wb+

    以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    ab+

    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

     

    用编辑器编辑的文件是文本文件;图片、视频、MP3等是二进制文件

    7.2.2  读文件

    相对路径文件:

    相对路径就是在同一个文件夹下面。建议工作把文件写在相对路径下面

    此时你需要先利用软件创建一个文件,文件里面随便写一些内容,然后保存在任意磁盘(路径尽量要简单一些)中。

    然后创建一个py文件,利用Python代码打开这个文件。

     

    读取test1文件示例如下:

    # 相对路径-读取文件

    f=open('test1.txt','r',encoding='utf-8')
    data = f.read()
    print(data)
    # close作用有时候会立马进去 有时间在内容里面  为了防止数据遗落
    f.close( )

     

    7.2.3  在本地磁盘读取文件:

    1. 在本地D盘新建一个 吴sir.txt 文件。

    在电脑用户创建txt文件时,默认的都是“ANSI”编码格式。如果需要创建完以后查看。

     

    打开txt文件以后继续点击界面工具栏中的“文件”功能。

     

    另存为:

     

    1.首先电脑用户打开需要修改编码方式的“TXT”文件。

    2.打开txt文件以后继续点击界面工具栏中的文件功能。

    3.点击文件显示下拉菜单以后。点击下拉菜单中的另存为选项。

    4.进入另存为操作界面以后。在下方的编码设置中设置自己需要的编码方式。

    5.设置好txt文件编码方式以后点击保存即可完成修改。

    绝对路径文件:

     

    参考代码:

     

    # 用什么编码写的文件 就用什么编码打开文件
    # 字符编码在控制面板设置
    # 绝对路径:
    # 绝对路径定义:从盘符开始的路径,这是一个完整的路径。
    f = open(r"D:我是吴sir.txt",mode='r',encoding='utf-8')
    # f = open(r"D:我是吴sir.txt",mode='rb')
    content = f.read()
    print(content)
    f.close()

     

    7.3写文件扩展:

     

    结果:

     

    # 写文件   ,没有则会创建文件, 有文件把源文件删除在写
    #f = open(r"D:我是吴sir.txt",mode='wb',encoding='utf-8')   # 执行会报错
    f = open(r"Wusir.txt",mode='wb')#不用加这个,encoding='utf-8',因为是二进制形式  不用编码了   是byte类型

    f.write("技术改变命运".encode('utf-8'))  #wb 是bytes类型  把str 转换成bytes类型 用encode

    f.close()

     

     

     

    追加:

     

    结果:

     

    # 追加  a
    f = open("Wusir.txt",mode='a',encoding='utf-8')
    f.write('匠心精神')
    f.close()

     

    7.3.1 只读文件:

     

    参考代码:

    # 只读
    f = open("Wusir.txt",mode='r+',encoding='utf-8')
    content = f.read()
    f.write('不用r+则会报错')
    f.close()
    #  报错原因因为r是只读的
    # r+ 模式
    # 读写功能  #读完文件后追加了内容

     

    7.4  文件操作之seek()函数

    扩展:seek()函数是Python中操作文件游标移动操作的函数

    seek() 方法用于移动文件读取指针到指定位置。

    作用:用来移动文件指针

     

    语法如下:

    文件对象.seek(偏移量,起始位置)

    起始位置假设偏移了,也就是说从开头数出来5个我们不读取我们从第六个开始读取

    起始位置:

    0:文件开头

    1:当前位置

    2:文件结尾

    注意:

    “人生苦短”用gbk存是2个字节一个字,用utf-8就是3个字节。

    因此以gbk打开时,seek(4) 就把光标切换到了“生”苦。两个字中间。
    但如果是utf8,seek(4)会导致,拿到了这个字的一部分字节,打印的话会报错,因为处理剩下的文本时发现用utf8处理不了,因为编码对不上了。少了一个字节。

     

    参考代码:

    #想知道光标在哪?
    f = open("Wusir.txt",mode='r+',encoding='utf-8')
    # 中文:一个中文用三个字节表示,所以出错
    # 一个字节等于三个字符
    f.seek(3)  #seek 是按照字节去定光标的位置  # 英文:一个字母用一个字节表示,所以不会有错误
    print(f.tell())    # 告诉你光标的位置
    content= f.read()
    print(content)
    f.close()

     

     

    总结:

    # 英文:一个字母用一个字节表示
    # 中文:一个中文用三个字节表示 

     

     

    7.4.1  读数据的区别

    read()  : 一次性读取整个文件内容。  read()读取的时候指定读取到什么位置

     r模式下,n按照字符读取。

    readline():读取每次只读取一行,注意点:readline()读取出来的数据在后面都有一个 内存不够时使用,一般不太用

    readlines() 返回一个列表,列表里面每个元素是原文件的每一行,如果文件很大,占内存,容易崩盘。

    就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素

     

    Wusir.txt文件内容写入:

     

    世界已不同,不必再打扰
    旅行的意义
    清欢
    伤心的云
    回家的路
    忍一忍抗一抗,拼一拼

     

     

     

    f = open('Wusir.txt',mode='r',encoding='utf-8')
    msg = f.read(3)
    msg1 = f.read()
    f.close()
    print(msg)
    print(msg1)

     

    结果:

     

     

    readline()

    readline()读取每次只读取一行,注意点:readline()读取出来的数据在后面都有一个

     

     

    f = open('Wusir.txt',mode='r',encoding='utf-8')
    msg1 = f.readline()
    msg2 = f.readline()
    msg3 = f.readline()
    f.close()
    print(msg1)
    print(msg2)
    print(msg3)

     

    解决这个问题只需要在我们读取出来的文件后边加一个strip()就OK了

     

    结果:

     

     

    readlines()

       readlines() 返回一个列表,列表里面每个元素是原文件的每一行,如果文件很大,占内存,容易崩盘。

     

     

    f = open('Wusir.txt',mode='r',encoding='utf-8')
    print(f.readlines())
    f.close()

     

     

    7.4.2  打开文件的另一种方式

    咱们打开文件都是通过open去打开一个文件,其实Python也给咱们提供了另一种方式:with open() as .... 的形式,那么这种形式有什么好处呢?

     

    写入文件:

     

     

    with open('Wusir.txt',mode='w',encoding='utf-8') as f1:
        f1.write("人生苦短,我用Python")

     

    结果:

     

    读取文件:

    with open('Wusir.txt',mode='r',encoding='utf-8') as f1:
        # f1.write("人生苦短,我用Python")
        print(f1.read())

  • 相关阅读:
    HTML5和HTML4之间的区别
    HttpRequest信息内容介绍
    Spring Web MVC处理请求的流程
    游戏中的路径动画设计与实现
    Python基本数据类型
    Python基本数据类型
    perl .= 操作符
    出差二、三事——北漂18年(25)
    perl 卸载Oracle数据库
    perl 卸载mysql数据库
  • 原文地址:https://www.cnblogs.com/wusirtpc/p/14440294.html
Copyright © 2020-2023  润新知