python文件操作详解

发布时间:2019-09-20 07:29:22编辑:auto阅读(1795)

    文件操作是编程中必不可少的,配置文件,数据存储都是对文件操作;按文件操作与格式主要内容如下图:
    python文件操作详解

    文件基本操作为打开,读取,写入,关闭,我们按这个过程来详解讲解。

    1.一个例子搞定打开,读取与关闭:

    准备工作:

    1>新建文件:E:\workdir\readme.txt(或者自己准备一个其他文本文件);
    2>文件添加一行内容:this is test

    直接上代码,有个基本认识:

    #文件路径
    path = r'E:\workdir\readme.txt'
    #打开文件
    f = open(path)
    #读取文件
    txt = f.read()
    print(txt)
    #关闭文件
    f.close()

    输出结果:this is test;
    感觉文件操作太简单了。

    那么问题来了:如果文件不存在如何创建文件?如何写文件?这种方式能够写入吗?
    我们来看文件打开方式。

    2 文件打开方式详解:

    2.1 open方法详解:

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

    返回一个文件IO对象,如果文件不存在或者打开出错触发异常;
    主要参数:

    参数 说明
    file 文件路径
    mode 打开方式,默认只读方式
    encoding 打开文件编码格式

    其他参数暂时使用默认值。

    我们再来看下文件打开方式:
    打开方式 说明
    'r' 只读方式 ,不能写入
    'w' 只写方式打开,文件不存在创建文件,文件存在截断文件
    'a' 只写方式打开,如果文件存在,再文件尾部开始写入
    '+' 读写方式打开
    'b' 二进制方式打开,例如图片; 'rb','wb','ab',上面操作类似

    2.2 打开方式测试:

    工作目录:'E:\workdir';

    case1:文件不存在创建文件:

    #该文件不存在
    wfpath = r'E:\workdir\testw.txt'
    f = open(wfpath, 'w')
    #写入一行
    f.write('python')
    f.close()

    查看E:\workdir\,创建文件testw.txt;

    case2:文件存在只写方式打开:

    准备工作:
    1>在'E:\workdir'下创建文件:test1.txt;
    2>写入一行文本:'abcd1234';

    测试:

    #文件存在
    fpath = r'E:\workdir\test1.txt'
    f = open(fpath, 'w')
    f.close()

    查看r'E:\workdir\test1.txt',内容被清空;

    case3:只写方式打开,能否读取:

    fpath = r'E:\workdir\test1.txt'
    #文件只写方式打开
    f = open(fpath, 'w')
    #进行读取
    f.read()
    f.close()

    结果:

    UnsupportedOperation                      Traceback (most recent call last)
    <ipython-input-13-30cd4bdc05f3> in <module>
          3 fpath = r'E:\workdir\test1.txt'
          4 f = open(fpath, 'w')
    ----> 5 f.read()
          6 f.close()
    
    UnsupportedOperation: not readable

    只写方式打开不能读取。

    case4:只写方式打开,尾部开始写入:

    使用'w'方式打开文件,文件会被裁剪,如何在尾部追加数据?使用'a'模式:

    #先写入abc,关闭重新打开文件,在写入123
    fpath = r'E:\workdir\testa.txt'
    #只写方式打开
    f = open(fpath, 'w')
    f.write('abc')
    f.close()
    #追加方式打开,文件尾开始写入
    fpath = r'E:\workdir\testa.txt'
    f = open(fpath, 'a')
    f.write('123')
    f.close()

    文件内容:abc123;

    cast5:读写方式打开:

    模式 说明
    'r+' 读写方式打开,从文件头开始读写
    'w+' 读写方式打开,文件被清空
    'a+' 追加方式读写打开,从文件尾开始读写
    #文件路径,文件内容:'this is test'
    path = r'E:\workdir\readme.txt'
    #打开文件
    f = open(path, 'r+')
    line = f.read()
    print(line)
    #写入文本
    f.write('end')
    #关闭文件,文件尾写入end
    f.close()

    结果:读取文件内容,并在文件尾插入end;
    大家可以尝试测试另外两种读写模式。

    3.文件读取

    读取文件方法:

    方法 说明
    read(size=-1, /) 读取指定字节或者读取完成,默认读取完
    readline(size=-1, /) 读取一行
    readlines(hint=-1, /) 读取多行,默认读取完,返回每行组成列表

    环境准备:readme.txt中添加四行:

    1:语法
    2:环境
    3:逻辑处理
    4:数据结构

    case1:一次读取完

    path = r'E:\workdir\readme.txt'
    f = open(path)
    lines = f.read()
    print(lines)

    case2:逐行读取

    path = r'E:\workdir\readme.txt'
    f = open(path)
    while True:
        #读取完,读取内容为''
        line = f.readline()
        if line:
            print(line, end='')
        else:
            break

    case3:按行一次读完

    path = r'E:\workdir\readme.txt'
    f = open(path)
    lines = f.readlines()
    print(lines)

    lines为列表;

    case4:使用for循环逐行读取:

    如果文件过大,一次读取会占用大量内存,所以一般情况下,我们使用for遍历文件:

    path = r'E:\workdir\readme.txt'
    f = open(path)
    for line in f:
        print(line, end='')

    4.文件写入:

    方法 说明
    write(text, /) 写入字符串,返回写入字节数
    writelines(lines, /) 写入多行

    实际操作:

    #‘\n’换行符
    info = ['java\n','c++\n']
    #只写方式打开文件
    path = r'E:\workdir\testw.txt'
    f = open(path,'w')
    #写入一行
    f.write('python'+'\n')
    #写入多行
    f.writelines(info)
    f.close()

    到这里文件基本操作我们就介绍完了,在专栏中我们再来看如何使用。

关键字