zoukankan      html  css  js  c++  java
  • python文件处理

    前言

    文件处理是任何 Web 应用程序的重要组成部分,当编写的程序需要将数据存储的时候,对于文件的读写操作也就必不可少了。python内置了几个用于处理文件的函数可供选择。
    本文将简单介绍文本文件的打开、读取、写入、删除、关闭操作

    文件打开

    open()是python中用于打开文件的函数,以下是它的定义

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

    open()函数一共有8个参数,但由于后面的七个参数均有默认值,所以实际上必须要提供的参数只有file,也就是文件名或者文件路径,在日常的使用中,一般我们只提供前两个参数就够了,所以此处也只详细介绍前两个参数
    file 是一个 path-like object,表示将要打开的文件的路径(绝对路径或者当前工作目录的相对路径),也可以是要被封装的整数类型文件描述符。如果文件和python文件在同一目录下,那么只需要写文件名就够了
    mode 是一个可选字符串,用于指定打开文件的模式。默认值是 'r' ,这意味着它以文本模式打开并读取。可用的模式有:

    字符 模式 意义
    'r' 读取 默认值,打开文件进行读取,如果文件不存在则报错
    'w' 写入 打开文件进行写入,如果文件不存在则创建该文件。
    'x' 创建 排它性创建,如果文件已存在则返回错误
    'a' 追加 打开供追加的文件,如果不存在则创建该文件。

    此外,还可以指定文件是应该作为二进制还是文本模式进行处理。

    字符 模式 意义
    ‘t' 文本 默认值,文本模式
    'b' 二进制 二进制模式
    举个例子,现在我需要创建一个名为test.txt的文件,以下几种方式都可以实现。
    open('test.txt','w')
    

    上面这行代码它等同于f = open("test.txt", "rt")
    如果是二进制文件,我们可以用

    open('test.bat','wb')
    

    但值得注意的是选择'x''r'的时候要注意文件是否已存在,那么有什么办法可以让我们知道文件到底有没有存在呢?简单,打开文件管理器看一下就好!开玩笑的,这里介绍两种方法

    os模块

    os模块中的os.path.exists()方法可以用于检验文件是否存在。

    import os
    os.path.exists('fileName.txt')
    

    存在返回True,不存在返回False
    当然这个方法还可以用来判断文件夹是否存在

    import os
    os.path.exists('folderName')
    

    同样,存在返回True,不存在返回False
    那如果出现文件夹名称和文件名相同怎么办?这时候我们可以用os.path.isfile()来检验

    try语句

    如果文件不存在那么就会抛出异常,那我们就可以通过捕获这个异常来判断文件是否存在,在使用open()函数时,如果文件不存在,那么会抛出FileNotFoundError的异常。

    try:
        f = open()
        f.close()
    except FileNotFoundError:
        print ("File is not found.")
    

    文件读取

    假设我们有一个文件demofile.txt且该文件与python文件处于一个相同的文件夹中,文件内容如下:

    Hello! Welcome to demofile.txt
    This file is for testing purposes.
    Good Luck!
    

    打开

    如需打开文件,使用内建的 open() 函数。

    open() 函数返回文件对象,此对象有一个 read() 方法用于读取文件的内容:

    f = open("demofile.txt", "r")
    print(f.read())
    

    输出结果

    Hello! Welcome to demofile.txt
    This file is for testing purposes.
    Good Luck!
    

    需要注意的是,打开时要确保文件存在,否则会报错。

    只读取文件的一部分

    如果有时候我们不需要读取全部的文件内容,read()也可以指定要返回的字符数

    f = open("demofile.txt", "r")
    print(f.read(5))
    

    上面这段程序就会只返回文件中的前五个字符。

    Hello
    

    读取一整行

    readline()方法返回一行内容

    f = open("demofile.txt", "r")
    print(f.readline())
    

    运行结果

    Hello! Welcome to demofile.txt
    

    如果我们需要读取多行,那我们可以循环调用该方法。
    通过循环遍历文件中的行,可以逐行读取整个文件

    f = open("demofile.txt", "r")
    for x in f:
      print(x)
    

    运行结果

    Hello! Welcome to demofile.txt
    This file is for testing purposes.
    Good Luck!
    

    也可以使用readlines(),与readline()不同的是,readlines()一次读取整个文件,像 read() 一样。readlines() 会自动将文件内容分析成一个行的列表
    为了确保我们打开文件的时候不会出错,我们可以在打开语句外加上try语句或者先判断一下文件是否存在

    # 使用os判断文件是否存在
    import os
    if os.path.exists('demofile.txt') == True:
        f = open('demofile.txt', 'r')
        print(f.read())
    
    # 使用try语句
    try:
        f = open('demofile.txt', 'r')
        print(f.read())
    except FileNotFoundError:
        print("File is not found.")
    

    文件写入

    在已有文件中写入

    这种情况对应的是open()函数中"a""w"两种参数

    字符 模式 意义
    'w' 写入 会覆盖任何已有的内容
    'a' 追加 会追加到文件的末尾
    举个例子
    打开文件 demofile2.txt 并将内容追加到文件中:
    f = open("demofile2.txt", "a")
    f.write("Now the file has more content!")
    f.close()
    
    # 追加后,打开并读取该文件:
    f = open("demofile2.txt", "r")
    print(f.read())
    

    运行结果

    Hello! Welcome to demofile2.txt
    This file is for testing purposes.
    Good Luck!Now the file has more content!
    

    这两个参数下使用open()函数都有一个共同点,文件存在那么直接写入,文件不存在就新建文件写入,也就是说不管怎么样我都要写进去。

    创建新文件写入

    这个时候我们很明确知道是需要创建新的文件的,那么"x""a""w"三个参数就都可以使用

    字符 模式 意义
    'w' 写入 如果指定的文件不存在,将创建一个文件
    'x' 创建 排它性创建,如果文件已存在则返回错误
    'a' 追加 如果指定的文件不存在,将创建一个文件
    举个例子
    创建名为 "myfile.txt" 的文件:
    f = open("myfile.txt", "x")
    

    文件删除

    删除文件就必须要导入os模块了,os模块中的os.remove()方法可以用于删除文件。
    举个例子
    删除文件 demofile.txt

    import os
    os.remove("demofile.txt")
    

    如果需要删除整个文件夹,可以用os.rmdir() 方法来实现
    举个例子
    删除文件夹 myfolder

    import os
    os.rmdir("myfolder")
    

    但要注意的是这个方法只能用来删除空文件夹,如果删除的文件夹非空,就会出现如下错误

    OSError: [WinError 145] 目录不是空的。: 'myfolder'
    

    为避免出现错误,在尝试删除文件之前我们要检查该文件是否存在,具体方法前面讲了,这里也就不再重复了,最好的办法当然还是用try语句

    文件关闭

    关闭文件可以使用close()来实现

    f = open("demofile.txt", "r")
    print(f.readline())
    f.close()
    

    随时关闭文件绝对是一个好习惯,在某些情况下,由于缓冲,在关闭文件之前,对文件所做的更改可能不会显示。

    参考文件

    【1】 https://www.cnblogs.com/jhao/p/7243043.html#_label3
    【2】https://www.w3school.com.cn/python/python_file_handling.asp

    本博客同时发布在CSDN中 https://blog.csdn.net/tangkcc/article/details/113438361?spm=1001.2014.3001.5501

    能力有限,如有错误之处,敬请指正!

  • 相关阅读:
    最常用和最难用的控件--ListView(Android第一行代码)
    LayoutInflater的使用
    JAVA的网络编程【转】
    Android 程序调试
    android Log日志使用
    Android Animation
    实现ImageView宽度填满屏幕
    Android ViewPager使用详解
    对另一个布局文件里的Button按钮进行监听
    如何在一个Activity里使用另一个xml布局文件
  • 原文地址:https://www.cnblogs.com/tangkc/p/14352448.html
Copyright © 2011-2022 走看看