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

    文件的来源

    什么是文件
    文件是操作系统提供给用户/应用程序的一种虚拟单位,该虚拟单位直接映射到硬盘空间。

    处理文件
    用户/应用程序直接操作文件(读/写)就被操作系统转换成具体的硬盘操作,从而实现用户/应用程序将内存中的数据永久保存在硬盘中。

    python处理文件的三个步骤

    1. 打开文件,得到文件句柄并赋值给一个变量
      f=open('test.txt','r',encoding='utf-8')
    2. 通过句柄(f)对文件进行操作
      data=f.read()
    3. 关闭文件
      f.close()
      f=open('test.txt','r',encoding='utf-8')过程分析
      _.由应用程序向操作系统发起系统调用open()
      _.操作系统打开该文件,并返回一个文件句柄给应用程序(python解释器)
      _.应用程序将文件句柄赋值给变量f

    打开一个文件包含两部分资源:操作系统级打开的文件+应用程序获得的句柄变量。在操作完一个文件时,必须把与该文件的这两部分资源全部回收,为了防止忘记回收,python引入了上下文管理机制。with open()语句会自动帮你回收资源
    打开文件时因为只能由操作系统操作,所以打开文件的默认编码会是操作系统的编码,在windows下是gbk,在linux中是utf-8,所以为了不乱码,文件以什么编码存储的,那么就用什么编码打开。

    文件操作rtb模式

    python处理文件分为两种,分别为打开模式和操作文件内容模式,打开模式默认为r

    文件打开模式

    以r模式打开文件

    with open(r'test.txt',mode='r',encoding='utf-8') as read_f:
        f.read()
        f.readline()
        f.readlines()
        f.readable()
    

    当以r模式打开文件时,获得的文件句柄主要有四个方法。

    1. f.read()
      读取所有内容,光标移动到文件末尾
    2. f.readline
      读取一行内容,光标移动到第二行行首位置
    3. f.readlines()
      读取每一行内容,存放在列表中
    4. f.readable()
      判断文件是否可读
      以w模式打开文件
    with open(r'test.txt',mode='w',encoding='utf-8') as f:
        f.write()
        f.writelines()
        f.writeable()
    

    当以w模式打开文件时,获得的文件句柄主要有三个方法。

    1. f.write()
      将内容写入文件
    2. f.writelines()
      一次写入多行内容
    3. f.writeable
      判断文件是否可写
      以a模式打开文件
    with open('test.txt',mode='a',encoding='utf-8') as f:
        f.write()
        f.writelines()
    1. `f.write()`
    将内容追加到文件末尾
    2. `f.writelines()`
    将多行内容追加到文件末尾
    # 操作文件内容的格式
    ## 打开文件的模式(默认为文本模式)
    **r,只读模式【默认模式,文件必须存在,不存在则会抛出异常】**
    **w,只写模式【不可读;不存在则创建新文件;存在则清空内容】**
    **a,追加写模式【不可读;不存在则创建新文件;存在则只追加内容】**
    ## 对于非文本文件,我们只能用使用b模式,'b'表示以字节的方式操作(而所有文件都是以字节的形式存储的,使用'b'模式无需考虑文件的字符编码)
    **注意:以b方式打开文件时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码**
    ## 其他模式
    **"+" 表示可以同时读写某个文件**
    **r+, 读写【可读,可写】**
    **w+,写读【可读,可写】**
    **a+, 写读【可读,可写】**
    
    
    **x, 只写模式【不可读;不存在则创建,存在则报错】**
    **x+ ,写读【可读,可写】**
    
    # 文件内指针移动
    
    ## 一: read(3):
    
      1. 文件打开方式为文本模式时,代表读取3个字符
    
      2. 文件打开方式为b模式时,代表读取3个字节
    
    ## 二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate
    
    注意:
    
      1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
    
      2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果
    
    # 文件的修改
    **文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,原理是把硬盘中的文件读入内存,在内存中修改完后,覆盖原来的内容。具体的说有两种实现方式:**
    
    ## 方式一:
    **将硬盘存放该文件的内容全部加载到内存,修改完毕后,再由内存覆盖到硬盘中**
    
    

    import os

    with open('test.txt') as read_f,open('.a.txt.swap','w') as write_f:
    data=read_f.read() #全部读入内存,如果文件很大,会很卡
    data=data.replace(') #在内存中完成修改

    write_f.write(data) #一次性写入新文件
    

    os.remove('a.txt')
    os.rename('.a.txt.swap','a.txt')

    ## 方式二:
    **将硬盘存放的文件一行一行读入到内存,修改完毕后就写入新文件,最后用新文件覆盖源文件**
    
    

    import os
    with open('test.txt') as read_f,open('.test.txt.swap','w') as write_f:
    for line in read_f:
    line = line.replace()
    write_f.write(line)

    os.remove('test.txt')
    os.rename('.test.txt.swap','test.txt')

  • 相关阅读:
    c#生成验证码
    使用Linq导出数据到execl
    AspNetPager2.0.dll组件的使用
    <httpRuntime>属性值的解析
    帮助文档chm的制作
    关于table边框打印不显示的样式设置
    【Reporting Services 报表开发】— 如何设置报表分页列标题每一页都显示
    Microsoft Dynamics CRM4.0 创建单据的时候,自动生成单据编号的通用方法
    【Reporting Services 报表开发】— 总结
    出现“安全时间戳无效,因为其创建时间(“2013-10-30T14:42:07.861Z”)是将来的时间。当前时间为“2013-10-30T14:36:23.988Z”,允许的时钟偏差是“00:05:00””的原因
  • 原文地址:https://www.cnblogs.com/zuanzuan/p/9686922.html
Copyright © 2011-2022 走看看