zoukankan      html  css  js  c++  java
  • 文件操作(初阶)

    操作文件时,一般需要经历如下步骤:

    • 打开文件
    • 操作文件
    • 关闭文件
    #open()是python的内置函数,而read()、close()等都是属于TextIOWrapper类的,详情参见源码。
    
    f = open('1.txt', 'r')       #打开文件
    data = f.read()           #操作文件
    f.close()                #关闭文件
    print(data)
    

    一、打开文件

    文件在open的时候是不会被加到内存中的,只有read或write的时候才会加到内存中。

    打开文件的模式有:

    r ,只读模式【默认】
    w,只写模式【不可读;不存在则创建;存在则清空内容;】
    x, 只写模式【不可读;不存在则创建,存在则报错】
    a, 追加模式【可读; 不存在则创建;存在则只追加内容;】

    "+" 表示可以同时读写某个文件:

    r+, 读写【可读,可写】,从开始向后读,写和追加的时候指针会调到最后
    w+,写读【可读,可写】,先清空数据,从开始向后读,写和追加的时候指针会调到最后
    x+ ,写读【可读,可写】,同上
    a+, 写读【可读,可写】,同上

    "b"表示以字节的方式操作:

    rb 或 r+b
    wb 或 w+b
    xb 或 w+b
    ab 或 a+b
    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型

    二、操作文件

    class TextIOWrapper(_TextIOBase):
        """
        Character and line based layer over a BufferedIOBase object, buffer.
        
        encoding gives the name of the encoding that the stream will be
        decoded or encoded with. It defaults to locale.getpreferredencoding(False).
        
        errors determines the strictness of encoding and decoding (see
        help(codecs.Codec) or the documentation for codecs.register) and
        defaults to "strict".
        
        newline controls how line endings are handled. It can be None, '',
        '
    ', '
    ', and '
    '.  It works as follows:
        
        * On input, if newline is None, universal newlines mode is
          enabled. Lines in the input can end in '
    ', '
    ', or '
    ', and
          these are translated into '
    ' before being returned to the
          caller. If it is '', universal newline mode is enabled, but line
          endings are returned to the caller untranslated. If it has any of
          the other legal values, input lines are only terminated by the given
          string, and the line ending is returned to the caller untranslated.
        
        * On output, if newline is None, any '
    ' characters written are
          translated to the system default line separator, os.linesep. If
          newline is '' or '
    ', no translation takes place. If newline is any
          of the other legal values, any '
    ' characters written are translated
          to the given string.
        
        If line_buffering is True, a call to flush is implied when a call to
        write contains a newline character.
        """
        def close(self, *args, **kwargs): 
            """关闭文件"""      
            pass
    
        def detach(self, *args, **kwargs): 
            pass
    
        def fileno(self, *args, **kwargs): 
            """文件描述符"""  
            pass
    
        def flush(self, *args, **kwargs): 
            """把缓冲区的内容写入硬盘"""
            pass
    
        def isatty(self, *args, **kwargs): 
            pass
    
        def read(self, *args, **kwargs): 
            """读取指定字节数据"""
            pass
    
        def readable(self, *args, **kwargs): 
            pass
    
        def readline(self, *args, **kwargs): 
            """只读取一行数据"""
            pass
    
        def seek(self, *args, **kwargs): 
            """
            指定文件中指针位置
            f.seek(0) 把指针归零
            """
            pass
    
        def seekable(self, *args, **kwargs): 
            pass
    
        def tell(self, *args, **kwargs): 
            """获取当前指针位置"""
            pass
    
        def truncate(self, *args, **kwargs): 
            pass
    
        def writable(self, *args, **kwargs): 
            pass
    
        def write(self, *args, **kwargs): 
            pass
    
        def __getstate__(self, *args, **kwargs): 
            pass
    
        def __init__(self, *args, **kwargs): 
            pass
    
        @staticmethod # known case of __new__
        def __new__(*args, **kwargs): 
            """ Create and return a new object.  See help(type) for accurate signature. """
            pass
    
        def __next__(self, *args, **kwargs): 
            """ Implement next(self). """
            pass
    
        def __repr__(self, *args, **kwargs): 
            """ Return repr(self). """
            pass
    

    三、关闭文件

    使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。

    
    file_object = open('thefile.txt')
    try:
         all_the_text = file_object.read( )
    finally:
         file_object.close( )
    
    注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。
    
    

    四、代码块

    创建代码块能实现的功能:

    1、每次操作完后不用再次手动关闭

    2、能同时打开两个文件(2.7之后才有的功能)

    批量操作

    
    with open('1.txt', 'r') as f1, open('2.txt','r') as f2:
        pass
    

    模拟文件复制的过程(针对大文件比较有效)

    
    with open('1.txt', 'r') as f1, open('2.txt','w') as f2:
        for line in f1:         #读取原文件内容,然后一行一行写到新文件中
            f2.write(line)
    
  • 相关阅读:
    使用java中的注解@see
    MacOS软件默认安装路径
    学习MACD指标
    go CD 用虚拟机快速增加一个新agent
    git推送本地分支到远程分支
    git如何切换远程仓库
    git命令查看远程分支
    Java 学习札记(一)JDK安装配置
    Oracle 基本操作符
    C# 常用控件属性及方法介绍
  • 原文地址:https://www.cnblogs.com/whatisfantasy/p/5967288.html
Copyright © 2011-2022 走看看