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

    文件相关操作

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

     【注】

        # 在同一个文件夹下(‘zhouyuan’这个文件与‘文件处理.py'文件在同一处)直接可以open加文件名。【】

        #Windows操作系统是gbk编码,而pycharm是默认utf-8编码,open函数解锁当前操作系统的编码,gbk不能解码utf-8编码的文件。

        #在文件夹中编写文件pycharm是自动保存的。

        #对于文件是可以在建立文件是修改它的编码方式的,例如,在pycharm的右下角,默认的utf-8编码改成与Windows一致的gbk编码,就可以不用encoding='utf-8' 修改解码方式与pycharm一致了。

        #什么是句柄?类比于应用程序无法直接去操作硬盘上的数据,此时操作系统需要提供一个句柄,并复制给一个变量。

    文件句柄 = open('文件路径', '模式')

        #关闭文件 f.close()

    1 f=open('zhoutao',encoding='utf-8')
    2 data=f.read()
    3 print(data)
    4 f.close()

        #文件处理流程:

    1 文件处理流程:
    2  1.打开文件,得到文件句柄并赋值给一个变量
    3  2. 通过句柄对文件进行操作
    4  3. 关闭文件

    #资源回收:
    打开一个文件包含两部分资源:操作系统级打开的文件+应用程序的变量。在操作完毕一个文件时,必须把与该文件的这两部分资源一个不落地回收,回收方法为:
    1、f.close() #回收操作系统级打开的文件
    2、del f #回收应用程序级的变量
    
    其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件还没有关闭,白白占用资源,
    而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close()
    f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。
    这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
    f=open('a.txt','r',encoding='utf-8')

     【1】文件处理读操作 (read(),readline(),readable(),readlines()

     1 f=open('zhoutao',‘r’)
     2 # data=f.read()
     3 # print(data)
     4 print(f.readable())  #readable()是否可读,结果是True False
     5 print(f.readline())   #readline()读取一行
     6 print(f.readline())
     7 print(f.readline())
     8 f.close()
     9 #结果:True
    10 #        周涛
    11 #        zhou
    12 #        yuan
    13 
    14 f=open('zhoutao')
    15 data=f.read()
    16 print(data)
    17 print(f.readable()) 
    18 print(f.readline())   #最后游标已经到了最后一行,再readline已经没有结果
    19 f.close()
    20 #结果:周涛
    21 #    zhou
    22 #    yuan
    23 #
    24 #    True
    25 
    26 f=open('zhoutao')
    27 data=f.readlines()  #readlines()每行作为一个字符串放入列表中
    28 print(data)
    29 f.close()
    30 #结果:['周涛
    ', 'zhou
    ', 'yuan
    ', '涛']

      【2】文件处理写操作(write(),writelines())(标明是'w'写模式,如果原文件有内容则会清空原内容,如果原文件不存在则会自动新建一个文件)

     1 f=open('zhouyuan','w',encoding='utf-8')
     2 # f.read()
     3 f.write('周圆最美
    ')
     4 f.write('周涛最丑
    ')
     5 f.writelines(['666
    ','888
    ','999
    '])   #文件内容只能是字符串
     6 f.close()
     7 #结果:周圆最美
     8 #     周涛最丑
     9 #     666
    10 #     888
    11 #     999

       【3】‘a’追加模式('a'直接追加到文件最后)

    1 f=open('zhouyuan','a',encoding='utf-8')
    2 f.write('写到文件最后')
    3 #结果:周圆最美
    4 #     周涛最丑
    5 #     666
    6 #     888
    7 #     999
    8 #     写到文件最后

       【4】with使文件打开自动关闭

    1 with open('zhouyuan','w') as f:
    2     f.write('666
    ')
    3 #结果:将‘zhouyuan’里面的内容改成了‘666’

       【5】文件的修改

    文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式:
    方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)
    方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件
     1 方法一:
     2 import os
     3 
     4 with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
     5     data=read_f.read() #全部读入内存,如果文件很大,会很卡
     6     data=data.replace('alex','SB') #在内存中完成修改
     7 
     8     write_f.write(data) #一次性写入新文件
     9 
    10 os.remove('a.txt')
    11 os.rename('.a.txt.swap','a.txt')
    12 
    13 方法二:
    14 import os
    15 
    16 with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
    17     for line in read_f:
    18         line=line.replace('alex','SB')
    19         write_f.write(line)
    20 
    21 os.remove('a.txt')
    22 os.rename('.a.txt.swap','a.txt')

    文件处理b模式

     【b方式不能指定编码,b表示原生二进制字节形式

    1 f=open('zhouyuan','rb')
    2 data=f.read()
    3 #‘字符串------encode-------bytes’
    4 #bytes-------decode-------‘字符串’
    5 print(data)
    6 print(data.decode('utf-8'))
    7 #结果:b'666
    '  #【b表示原生二进制字节形式】
    8 #        666
    1 f=open('zhouyuan','wb')
    2 f.write(bytes('你好漂亮
    ',encoding='utf-8'))    #字符串以utf-8编码成字节
    3 f.write('周圆'.encode('utf-8'))
    4 #结果:你好漂亮
    5 #     周圆
    1 f=open('zhouyuan','ab')
    2 f.write('小仙女'.encode('utf-8'))
    3 #结果:你好漂亮
    4 #     周圆小仙女

    文件操作其他方法

    1 f=open('a.txt','w',encoding=' gbk')
    2 f.write('nihao')
    3 print(f.closed)   #判断文件是否关闭
    4 print(f.encoding) #显示编码,显示打开的编码,与文件以什么编码存入无关
    5 f.flush()  #自动保存,从内存中到硬盘。不需要人工保存
    6 print(f.tell())  #显示光标位置在哪
    7 #结果:False
    8 #     gbk
    9 #     5
  • 相关阅读:
    拓端tecdat|R语言投资组合优化求解器:条件约束最优化、非线性规划求解
    拓端tecdat|R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析
    拓端tecdat|R语言聚类有效性:确定最优聚类数分析IRIS鸢尾花数据和可视化
    拓端tecdat|R语言k-means聚类、层次聚类、主成分(PCA)降维及可视化分析鸢尾花iris数据集
    【拓端tecdat】R语言用Hessian-free 、Nelder-Mead优化方法对数据进行参数估计
    springcloud之zuul网关服务并携带头信息转发token
    windows环境搭建Vue开发环境
    JVM之top+jstack分析cpu过高原因
    JVM调优之jstack找出最耗cpu的线程并定位代码
    用自顶向下、逐步细化的方法进行以下算法的设计: 1. 输出1900---2000年中是软黏的年份,符合下面两个条件之一的年份是闰年:
  • 原文地址:https://www.cnblogs.com/zhouyuan666/p/9513170.html
Copyright © 2011-2022 走看看