zoukankan      html  css  js  c++  java
  • Python 文件操作(1)

    今天大佬给了个A文件给我,里面存放了机密数据。
    什么机密数据???
    有帅哥的联系方式吗?

    赶紧打开来看一下

    1.open() 函数基本版

    Python大佬有个内置开文件的函数open(), 专门开文件的。它能打开一个文件,并且返回一个文件对象。(这个文件对象对应有一系列函数,用起来贼方便,这里不细讲,下篇见)
    下面看一下它的语法:

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
    

    当然,一般我们会用到前面两个参数,一个为文件的路径(你要告诉人家地址,可以是绝对地址,也可以是相对地址,这样才能找到帅哥的家门呀);另一个用于指定你要以什么样的方式打开这个文件(有读、有写,具体方式见下面的讲解,默认使用'r',只读模式)。encoding呢,你乱码的时候找它就对了。

    举个栗子

    open('secret.txt')
    
    ---------------------------------------------------------------------------
    
    FileNotFoundError                         Traceback (most recent call last)
    
    <ipython-input-1-0b7125542668> in <module>()
    ----> 1 open('secret.txt')
    
    
    FileNotFoundError: [Errno 2] No such file or directory: 'secret.txt'
    

    没文件!!!你竟敢把秘密藏起来

    突然,想起,原来我把secret放在G盘了,写相对路径去找是不OK的呀

    好啦好啦,我再开一遍

    open('G:Pythonsecret.txt', 'r')
    
    <_io.TextIOWrapper name='G:\Python\secret.txt' mode='r' encoding='cp936'>
    
    open('G:Pythonsecret.txt')
    
    <_io.TextIOWrapper name='G:\Python\secret.txt' mode='r' encoding='cp936'>
    

    找到秘密文件啦!!!
    如果你只是想只读这个文件,写不写'r'都行,make no difference

    一般,我们会把这个文件对象挂个标签,叫他f什么的,那么后面就可以随意来个读、写操作
    下面来示范操作

    f = open('G:Pythonsecret.txt')
    f.read()    
    
    '[Jason:21, 179, 70, 18813975806],[K:22, 180, 75, 18813975111]'
    

    2.open() 进阶版——打开文件的方式

    mode常见用法

    mode参数千千万,第一次看的时候,我整个人是晕的

    (你也太浮夸了),下面是一些常用的参数:

    • r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式

    • w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

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

    • b 以二进制形式打开二进制文件,比如图片、视频、音频。

    • '+ ' 打开一个文件进行更新(可读可写)(通杀)

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

    • w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

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

    • rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。

    • wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

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

    • rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件,如图片等。

    • wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

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

    更详细的可参见菜鸟教程相关文档。

    **Remember that: **
    r : read(读)
    w : write(写)
    a : append(附上,在后面加上)

    英语学得好,写代码都简单一点

    今天不讲读写操。先讲关闭文件。

    3.关闭文件

    3.1 一般关闭文件

    文件使用完毕后一定一定要关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

    f.close()
    

    酱就行了。

    但是,打开文件,不一定都能打开呀,有时候打不开会报IOError,然后后面写的f.close()就不会被调用了。

    有没有办法解决这个问题呢?
    大佬们早解决了

    优化版关闭文件

    法一:try … finally …
    try:
        f = open('G:Pythonsecret.txt')
        print(f.read())  
    finally:
        if f:
            f.close()
    
    [Jason:21, 179, 70, 18813975806],[K:22, 180, 75, 18813975111]
    

    上面看起来很繁琐,再来优化:

    法二:with open(xxx) as f:
    with open('G:Pythonsecret.txt') as f:
        print(f.read())
    
    [Jason:21, 179, 70, 18813975806],[K:22, 180, 75, 18813975111]
    

    今天主讲开关文件,后面讲解读写操作,嗯,see you next time!

  • 相关阅读:
    关于<form>标签
    javaEE学习随笔
    类与接口
    java学习中的一些总结
    java 对象的创建
    jQuery选择器
    CSS学习随笔
    JDBC笔记 二
    Java EE笔记 (1) JDBC
    泛型笔记
  • 原文地址:https://www.cnblogs.com/wyy1480/p/10928208.html
Copyright © 2011-2022 走看看