zoukankan      html  css  js  c++  java
  • python语法(四)— 文件操作

    前面几天学习了一写python的基础语法,也学习了分支if,循环while和for。由于之前已经做过几年的开发了,所以我们知道,许多数据来源并不是靠键盘输入到程序中去的,而是通过数据库和文件来获取到的,那么今天就来学习文件对象。

    一、文件的打开(open()和file())

    python 中为我们提供了两种打开文件的方式,分别是open()函数和file()函数,为我们提供了初始化输入/输出(I/O)操作的通用方法,当我们打开一个文件时会返回一个文件对象,但是这里需要注意的是,如果文件不存在,是会抛出异常的。而且file()函数和open()函数是一致的,可以互相替换。

    • 基础语法
    file = open('file_location', access_mode='r', buffering=-1)

    其中三个参数分别代表了,文件路径,这里可以是相对路径,也可以是绝对路径,第二个参数是表示打开文件的模式,第三个参数是开始的位置。

    • 文件模式
    文件模式操作
    r 以读的方式打开,如果文件不存在则抛出异常。文件可以不写打开模式,模式是以r的方式打开。
    w 以写的方式打开,如果文件存在则清空文件内的内容,如果文件不存在,则创建文件。
    a 以追加模式打开文件,如果文件存在则追加内容如果文件不存在则创建新文件。
    r+ 以读写模式打开,如果文件不存在则抛出异常
    w+ 以读写模式打开,如果文件存在则清空文件内的内容,如果文件不存在,则创建文件。
    a+ 以读写模式打开文件,如果文件存在则追加内容如果文件不存在则创建新文件。

    二、文件读取 read 方法

    read()方法是直接以字节的方式来读取文件,将文件读取到字符串中,可以给到读取文件的字节数,如果文友给定,则默认为读到文件末尾为止,也就是-1.

    • 语法
    file = open("fileName");
    data = file.read();
    print(data);
    file.close(); 

    如果一个文件特别大,我们这样去读的话就会把文件中的所有内容都会读到内存中,这样会导致我们的内存被撑爆,所有我们需要在这里限制读的大小,也就是在read()中加入参数,这里参数表示字节,我们一般是写4096,也就是读4096个字节。为什么是4096呢?因为,我们硬盘的分区格式化时,硬盘的一个分区最小簇是4096(4K),而且硬盘的工作效率比较低,所以当我们去寻址时,最好是将这一个簇的空间的值都拿出来,这样工作效率是最高的。

    三、文件读取 readline 方法与 readLines 方法

    readlin()方法只适用于文本文件,因为他是读取一行文件。

    • readlin()语法
    file = open("fileName");
    data = file.readlin();
    file.close();
     

    readlins()方法只适用于文本文件,因为他是读取剩下的所有行的文件。

    • readlins()语法
    file = open("fileName");
    data = file.readlins();
    file.close(); 

    四、文件迭代

    如果将文本文件逐行进行处理,此时我们就需要结合循环去处理文件。
    我们来看个例子,读取一个文本文件,并且将其逐行输出。

    # -*- coding=utf-8 -*- 
    '''
    Created on 2018年12月23日 
    文件
    
    @author: Herrt灬凌夜
    '''
    file = open("C:\Users\Administrator\Desktop\testFile.txt");
    for line in file :
        print(line, end="");
    file.close();
     

    我们将file的每一行赋值给line,然后输出line。这里需要注意的是print是自带一个换行符的,所以我们在这里要将print的换行符去掉。

    五、文件写入 write 方法

    write 方法与 read方法正好相反,它是将文本数据和二进制数据写入到文件中,而在写入的过程中,程序是不会自动加如结束语句,比如换行等等,这需要我们手动写入。

    • write 语法
    file = open("fileName", "w");
    data = file.write("content
    ");
    file.close();
     

    这里我们需要注意的是,我们使用write写入文件时,文件并不会立刻写入文件中,而是首先存入缓存中,当文件达到比较大,比如4K时会自动往硬盘上写,但是如果我们需要立刻将文件写入到文件的话,我们就需要使用文件的flush()方法,或者将文件closer(),这样,系统就会立刻将缓存中的内容直接写入到硬盘中。

    六、文件写入 writelines([]) 方法

    writelines方法,同样是只适用于文本文件,但是他的传参是一个列表,可以将列表中的每一个元素写入到文件中。
    我们看个例子:

    file = open("C:\Users\Administrator\Desktop\testFile.txt", "a");
    data = file.writelines(["这是第四行
    ", "这是第五行
    "]);
    file.close();
     

    七、练习

    所谓熟能生巧,尤其我们刚刚开始学习语言更是需要多加练习,所以最后以一个例子来结束今天的学习。
    模拟 cp 操作:

    # -*- coding=utf-8 -*- 
    '''
    Created on 2018年12月23日 
    文件
    
    @author: Herrt灬凌夜
    '''
    srcFileLocation = "C:\Users\Administrator\Desktop\None和表达式.mp4";
    dstFileLocation = "C:\Users\Administrator\Desktop\cpNone和表达式.mp4";
    
    srcFile = open(srcFileLocation, "rb");
    dstFile = open(dstFileLocation, "wb");
    
    while True :
        data = srcFile.read(4096);
        if len(data) == 0 :
            break;
        print("1");
        dstFile.write(data);
    
    srcFile.close();
    dstFile.close();
     

    我这里是将一个视频文件做了一个拷贝操作,需要注意的是win的操作系统如果open()文件要以字节的方式打开时,我们需要加个b表示以字节方式打开。

     

    -------------------- END ---------------------

     

    
    

     

    最后附上作者的微信公众号地址和博客地址 

     

    
    

     

    公众号:wuyouxin_gzh

     

    
    

     

     

    
    

     

     

     

    
    

     

    Herrt灬凌夜:https://www.cnblogs.com/wuyx/

  • 相关阅读:
    跟我从零基础学习Unity3D开发--资源打包篇(AssetBundle)
    跟我从零基础学习Unity3D开发--U3d脚本注意事项及两个基本函数的简单介绍
    跟我从零基础学习Unity3D开发--初识U3D
    关于把.net 2.0的项目升级到.net4.0遇到的一些问题
    反射在ADO.NET中的运用(你还在每个项目中循环遍历DataTable吗)
    您还在招聘网上海量投简历然后等面试机会吗?那你已经OUT了。
    程序员其实也有感情的,不是我们无情,是您关怀不够。
    C#程序员的春天之从零开始学习unity3D游戏开发入门教程二(创建项目及基本面板介绍)
    C#程序员的春天之从零开始学习unity3D游戏开发入门教程一(前言)
    跟我从零基础学习Unity3D开发--Unity3D开发必备神器(Visual Studio Tools for Unity)
  • 原文地址:https://www.cnblogs.com/wuyx/p/10166564.html
Copyright © 2011-2022 走看看