zoukankan      html  css  js  c++  java
  • Python13:文件操作

    文件操作简单来讲,就是打开,操作,关闭。和生活中打开文件是一样的逻辑。其中打开包括获取文件位置,也和生活中的操作一样。

    现在随便找一个文件,用于学习,文件名叫file_test。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    data = open("file_test",encoding="utf-8").read()
    print(data)

    输出:

    在我年轻时,有本神奇的杂志叫做 Whole Earth Catalog,当年我们很迷这本杂志。那是一位住在离这不远的Menlo ParkStewart Brand发行的,他把杂志办得很有诗意。那是1960年代末期,个人计算机跟桌上出版还没发明,所有内容都是打字机、剪刀跟拍立得相机做出来的。杂志内容有点像印在纸上的Google,在Google出现之前35年就有了:理想化,充满新奇工具与神奇的注记。Stewart跟他的出版团队出了好几期 Whole Earth Catalog,然后出了停刊号。当时是1970年代中期,我正是你们现在这个年龄的时候。在停刊号的封底,有张早晨乡间小路的照片,那种你去爬山时会经过的乡间小路。在照片下有行小字:求知若饥,虚心若愚。那是他们亲笔写下的告别讯息,我总是以此自许。当你们毕业,展开新生活,我也以此期许你们。求知若饥,虚心若愚。

    非常谢谢大家。

    Process finished with exit code 0

    解释:

    data = open("file_test",encoding="utf-8").read():简单的打开并读的方法,但这个方法并不好。其中open()是打开方法,"file_test"是文件相对位置的参数(就是和程序在同一个目录下),encoding="utf-8":告诉程序采用“utf-8”编参码(默认采用GBK编码)。read()就是读文件的方法。一次全部读完。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test",encoding="utf-8")
    data = f.read()
    data2 = f.read()
    print(data)
    print("-------data2---------",data2)

    输出:

    在我年轻时,有本神奇的杂志叫做 Whole Earth Catalog,当年我们很迷这本杂志。那是一位住在离这不远的Menlo ParkStewart Brand发行的,他把杂志办得很有诗意。那是1960年代末期,个人计算机跟桌上出版还没发明,所有内容都是打字机、剪刀跟拍立得相机做出来的。杂志内容有点像印在纸上的Google,在Google出现之前35年就有了:理想化,充满新奇工具与神奇的注记。Stewart跟他的出版团队出了好几期 Whole Earth Catalog,然后出了停刊号。当时是1970年代中期,我正是你们现在这个年龄的时候。在停刊号的封底,有张早晨乡间小路的照片,那种你去爬山时会经过的乡间小路。在照片下有行小字:求知若饥,虚心若愚。那是他们亲笔写下的告别讯息,我总是以此自许。当你们毕业,展开新生活,我也以此期许你们。求知若饥,虚心若愚。

    非常谢谢大家。

    -------data2---------

    解释:

    open():当open()打开文件后,其实是获得了文件的句柄,在文件开头的位置。

    data = f.read():第一次读操作读取了全文件,获得的数据给data.

    data2 = f.read():第二次读操作,句柄到了末尾,所以第二次读操作是获取不到内容的。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test",encoding="utf-8")
    data = f.read()
    f.write("找到你所喜欢的东西")
    print(data)

    输出:

    Traceback (most recent call last):

      File "E:/python_code/s14/day03/file_demo.py", line 7, in <module>

        f.write("找到你所喜欢的东西")

    io.UnsupportedOperation: not writable

    Process finished with exit code 1

    解释:

    f.write("找到你所喜欢的东西"):写操作,但程序出错了,此时程序打开的方式是以读的形式打开的,只能读,不能写,在open()方法中可以设置参数。f = open("file_test","r",encoding="utf-8")

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test","r",encoding="utf-8")
    print(f.read())
    f.close()

    输出:

    非常谢谢大家。

    Process finished with exit code 0

    解释:

    f = open("file_test","r",encoding="utf-8"):加不加“r”都是一样,打开的默认方式就是这种读的方式操作,若进行写操作则会出错。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test2","w",encoding="utf-8")
    f.write("人生中的点点滴滴")
    f.write("总要串在一起 ")
    f.write("你必须找到你爱的东西 ")
    f.close()

    输出:

    人生中的点点滴滴总要串在一起
    你必须找到你爱的东西
    你必须全力以赴你会明白生命

    解释:

    f = open("file_test2","w",encoding="utf-8"):注意,此种是以写的模式打开一个文件,其实不是打开,是创建并打开,如果此时输入的参数是原有的文件,也会重新创建并打开,原有的文件则会删除,慎用。此时只能以写的方式打开文件,若尝试读文件则会出错。

    输出:此程序的输出是在打开的文件里,可以看到你写的东西保存在了文章里。

    f.write("人生中的点点滴滴")
    f.write("总要串在一起 "):普通写,如果句子末尾不带“ ”,则不换行一直写,如果有换行符,则另起一行重新写。

    f.close():关闭文件,处理完文件后的良好习惯操作。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test2","a",encoding="utf-8")
    f.writelines("没有人想死")
    f.writelines("用爱去生活")
    f.close()

    输出:

    解释:

    f = open("file_test2","a",encoding="utf-8"):以追加的方式打开文件,这种方式不会删除原文件,打开后可以在句柄后边添加写操作,但不能进行读操作。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test",encoding="utf-8")
    print(f.readline())
    print(f.readline())
    f.close()

    输出:

    你必须要找到你所爱的东西

    今天,有荣幸来到各位从世界上最好的学校之一毕业的毕业典礼上。我从来没从大学毕业。说实话,这是我离大学毕业最近的一刻。今天,我只说三个故事,不谈大道理,三个故事就好。

    Process finished with exit code 0

    解释:

    print(f.readline()):每次读取一行。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test",encoding="utf-8")
    for i in range(5):
        print(f.readline())
    f.close()

    输出:

    你必须要找到你所爱的东西

    今天,有荣幸来到各位从世界上最好的学校之一毕业的毕业典礼上。我从来没从大学毕业。说实话,这是我离大学毕业最近的一刻。今天,我只说三个故事,不谈大道理,三个故事就好。

    一、第一个故事,是关于人生中的点点滴滴怎么串连在一起

    我在里德学院(Reed college)待了六个月就办休学了。到我退学前,一共休学了十八个月。

    那么,我为什么休学? 这得从我出生前讲起。

    Process finished with exit code 0

    解释:

    for i in range(5):
        print(f.readline())

    循环输出前5行。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test",encoding="utf-8")
    for i in f.readlines():
        print(i)
    f.close()

    输出:

    。。。

    非常谢谢大家。

    Process finished with exit code 0

    解释:

    for i in f.readlines():
        print(i)

    readlines():遍历文件,循环输出。但这种方法不好,如果文件过大,会给内存造成压力甚至内存溢出。建议用下面方法遍历文件。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test",encoding="utf-8")
    for i in f:
        print(i)
    f.close()

    输出:

    。。。

    非常谢谢大家。

    Process finished with exit code 0

    解释:

    for i in f:
        print(i)

    此时遍历ff就形成了一个迭代器。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test",encoding="utf-8")
    count = 0
    for data in f:
        count +=1
        if count == 9:
            print("我是第十行")
            continue
        print(data)
    f.close()

    输出:

    。。。

    我是第十行

    举例来说:

    。。。

    解释:

    中间处理文件,遇到第十行,跳过。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    with open("file1","r",encoding="utf-8") as f:
        for line in f:
            print(line)

    输出:

    一二三四五六七八

    二二三四五六七八

    三二三四五六七八

    四二三四五六七八

    五二三四五六七八

    六二三四五六七八

    七二三四五六七八

    八二三四五六七八

    Process finished with exit code 0

    解释:

    文件的with操作,因为打开文件操作后总要关闭文件,但有时候会忘记关闭,如果打开文件过多,内存中会存在过多文件句柄,造成压力,所以可以使用with操作,处理完文件后会自动关闭文件,而不用再使用close()方法关闭。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test",encoding="utf-8")
    print(f.tell())

    输出:

    0

    Process finished with exit code 0

    解释:

    f.tell():打印开始句柄的位置

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test",encoding="utf-8")
    print(f.readline())
    print(f.tell())

    输出:

    你必须要找到你所爱的东西

    38

    Process finished with exit code 0

    解释:

    句柄的移动,是按字符计数的。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test",encoding="utf-8")
    print(f.readline())
    print(f.tell())
    f.seek(0)
    print(f.readline())
    print(f.tell())

    输出:

    你必须要找到你所爱的东西

    38

    你必须要找到你所爱的东西

    38

    Process finished with exit code 0

    解释:

    f.seek(0):设置句柄的位置

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test",encoding="utf-8")
    print(f.encoding)

    输出:

    utf-8

    Process finished with exit code 0

    解释:

    f.encoding:查看文件编码。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test","r+",encoding="utf-8")
    print(f.readline())
    print(f.readline())
    print(f.tell())
    print(f.write("time to sleep "))
    f.close()

    输出:

    一二三四五六七八

    二二三四五六七八

    52

    14

    Process finished with exit code 0

    解释:

    f = open("file_test","r+",encoding="utf-8"):以读写的方式打开文件,读的时候从头读,但写的时候是追加,从最后开始写。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f = open("file_test","w+",encoding="utf-8")
    f.write("time to play ")
    f.write("time to sleep ")
    print(f.tell())
    f.seek(5)
    f.write("time to happy ")
    print(f.readline())

    f.close()

    输出:

    29

    to play

    Process finished with exit code 0

    解释:

    f = open("file_test","w+",encoding="utf-8"):以写读的方法打开文件,会清空内容(重新创建一个文件覆盖旧的),写的时候也是追加,在最后的地方写入,读的时候从第一个位置读,或者设置句柄的位置开始读。

    方法操作:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:Mclind

    f1 = open("file1","r",encoding="utf-8")
    f2 = open("file2","w",encoding="utf-8")
    for line in f1:
        if "四二三四五六七八" in line:
            line = line.replace("四二三四五六七八","Python is my goal")
        f2.write(line)

    f1.close()
    f2.close()

    file2.txt输出:

    一二三四五六七八
    二二三四五六七八
    三二三四五六七八
    Python is my goal
    五二三四五六七八
    六二三四五六七八
    七二三四五六七八
    八二三四五六七八

    解释:

    文件的修改,一种是全把文件读到内存,然后修改,再保存到内存,但若遇到大文件,对内存是一种压力。

    一种是打开文件读,再打开一个文件写,可以一行一行的读,然后写入到新文件,很繁琐,但实用。

  • 相关阅读:
    laravel 连接同一服务器上多个数据库操作 、 连接多个不同服务器上的不同数据库操作以及多个数据库操作的事务处理
    061——VUE中vue-router之通过程序控制路由跳转
    015PHP文件处理——文件处理flock 文件锁定 pathinfo realpath tmpfile tempname
    linux传输文件lrzsz
    ffmpeg命令详解(转)
    提取文件名剔除扩展名
    CGI = MCC + MNC + LAC + CI
    VMware虚拟机提示“锁定文件失败 打不开磁盘”解决方法
    VirtualBox.org
    bat函数调用 带返回值
  • 原文地址:https://www.cnblogs.com/mclind/p/8914941.html
Copyright © 2011-2022 走看看