zoukankan      html  css  js  c++  java
  • 11_Python文件操作

    一、文件操作的基本流程

    计算机系统分为:计算机硬件,操作系统,应用程序三部分。

    我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

    有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程。

    操作一个文件首先思考都需要哪些参数:

    1. 文件所在的路径,如:d: est.txt
    2. 读取文件所使用的编码
    3. 操作方式:读、写、追加...
    4. 关闭文件,释放资源

    读取d: est.txt文件,保存格式utf-8:

    #在Python中,我们通过open()获得一个文件句柄,然后我们利用文件句柄实现对文件的操作
    f = open('d:\test.txt',encoding='utf-8',mode='r')
    content = f.read() #读取文件内容
    f.close()
    print(content)

    二、文件编码

    f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。

    #这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
    f=open('a.txt','r',encoding='utf-8')

    三、文件打开模式

    文件句柄 = open(文件路径,操作方式,编码)

    '''
    1.对于文本文件的读取:
    r:只读模式
    w:只写模式
    a:追加模式
    
    2.对于非文本文件的读取:
    rb:以二进制只读模式
    wb:以二进制只写模式
    ab:以二进制追加模式
    
    3.+ 就是代表了功能增强
    r+:以读写的模式打开
    w+:以读写模式打开
    a+:以读写模式打开
    
    4.以bytes类型操作的模式
    rb+/r+b 以二进制读写模式打开
    wb+/w+b 以二进制读写模式打开
    ab+/a+b 以二进制读写模式打开
    '''
    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

    四、文件操作方法

    4.1常用操作方法

     1 #1.read() 整体读取出来
     2 f = open('d:\test.txt',encoding='utf-8')#r可以省略
     3 content = f.read()
     4 print(content)
     5 
     6 #2.readline()读取一行
     7 f = open('d:\test.txt',encoding='utf-8')
     8 line1 = f.readline()  #一次只读取一行内容
     9 line2 = f.readline()
    10 print(line1)
    11 print(line2)
    12 
    13 
    14 #3.readlines() 读取,把每一行作为列表元素,返回一个列表
    15 li = []
    16 f = open('d:\test.txt',encoding='utf-8')
    17 li = f.readlines()
    18 print(li)#['This is a file.
    ', 'Python3 file Operate method.
    ']
    19 
    20 #4.readable()
    21 f = open('d:\test.txt',encoding='utf-8')
    22 l = f.readable() #是否可读
    23 print(l)
    24 
    25 #5.读取大文件,如果一个文件为16G,远远超过了我们普通电脑的内存大小,怎么读
    26 f = open('d:\test.txt',encoding='utf-8')
    27 for i in f:  #文件句柄,一行一行的读
    28     print(i)
    29 
    30 #6.读取n个字符,     在rb模式下,按照字节读
    31 f = open('d:\test.txt',encoding='utf-8',mode='r')
    32 content = f.read(3)
    33 print(content)  #Thi  中华人
    34 
    35 # rb 模式下  不用 encoding='UTF-8'
    36 f = open('d:\test.txt',mode='rb')
    37 content = f.read(3)
    38 print(content) #b'xe4xb8xad'
    39 print(b'xe4xb8xad'.decode('utf-8'))  #

    4.2只写操作

    1 f = open('d:\test.txt',mode='w',encoding='utf-8')
    2 if f.writable():  #判断文件是否可写
    3     f.write('新内容') #如果文件存在,把原内容覆盖;如果文件不存在,创建文件,写入内容
    4 if f.readable():  #不可以读,所以无打印
    5     print(f.read())

    4.3追加操作

    1 f = open('d:\test.txt',mode='a',encoding='utf-8')
    2 if f.writable():#判断是否可写
    3     f.write("追加的内容") #如果文件存在,在原内容后追加;如果文件不存在,创建文件,写入内容
    4 if f.readable():#判断是否可读  ,不可读
    5     f.read(f.read())

    五、光标移动

    seek()、tell()、truncate()光标移动都是以字节为单位的。

    1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果。

    seek()

    seek() 方法用于移动指针(文件读取指针)到指定位置。

    tell()

    truncate()

      

  • 相关阅读:
    day10
    day 9
    day 8
    flex布局
    简单的todolist的demo
    JS中数组与对象的遍历方法实例小结
    css中animation和@keyframes 动画
    form表单相关
    Restful API接口规范
    什么是接口文档,如何写接口,有什么规范?
  • 原文地址:https://www.cnblogs.com/weihengblog/p/8387212.html
Copyright © 2011-2022 走看看