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

    一、文件处理

    1.什么是文件处理

    修改存储的信息

    2.什么是文件

    操作系统提供的虚拟概念,存储信息

    3.操作系统的流程

    1.打开文件

    open方式

    open ('文件的路径',‘打开方式’,'字符编码格式'):
    打开方式有三种:
    r  只读模式
    w  写入模式,会清空原有的内容,没有则会创建
    a  追加内容,在最后加入内容,没有会创建。
    
    

    文件打开的方式有三种,打开时将打开方式固定打开时的字符编码

    2.读取/修改文件

    .write() 			#是写入文件
    .read()			   #读取文件 
    

    可以在write()填入想要添加的内容,但控制写入的方式是 r w a模式

    3.保存

    f.flush() #快速保存,可以不使用

    4.关闭文件

    f.close() # 告诉操作系统关闭文件

    二、文件的打开

    1.两种打开模式

    t 文本模式

    用于文本的操作

    b 二进制模式

    一般适用图片/视频/音频的保存。

    f = open (r'1.txt','rb')
     # 打开模式 注意设置为b  
    

    以上两种都不能单独使用,需要和r/w/a配合连用,注意编码不需要更改。

    2.文件打开的三种方式

    读取、写入、追加写入

    r模式

    r ==》 read ==》 只读

    在地址前加r 可以使地址内字符无效化

    f = open(r'文件的地址内容','r',encoding='utf-8')
    f.write('你好,世界')
    #(直接报错 not writable)
    

    仅做了解

    readline		# 一行一行的读取
    
    readlines		# 读取所有行放入列表
    

    如果想循环读出文本内容

    for i in f.read():		# 循环出一个一个字符
    	print(i)
    
    for i in f:			# 循环出一行行,节省内存
        print(i)
    

    w模式

    w==》 write ==》只写(清空原本的文件后写入,如果没有则创建再写)

    f = open(r'1.txt','r',encoding='utf-8')
    f.write('用心创造快乐')
    # 清空文件然后写入
    

    仅做了解

    writelines
    
    f.writelines(['abc','edf','gbk'])
    # 自动拼接列表元素,一行写入
    #	abcedfgbk
    

    a模式

    追加写入,会在文档末尾写入,不可读

    f = open(r'1.txt','a',encoding='utf-8')
    f.write('没钱玩你麻痹')
    # 在文本最后追加
    

    3.绝对路径与相对路径

    绝对路径

    从盘符开始,一般是 C;D;

    相对路径

    执行文件(当前运行的文件)的文件夹下的文件名。

    未来的项目尽量使用相对路径。

    4.with 管理上下文

    with 提供了一个自动关闭文件的方法(解除了操作系统的占用)

    with open ('1.py','r',encoding='utf-8') as f:
        date = f.read()
        # 读取的文件放在python的内存中
        print(f.read)
        # with 会自动关闭系统占用
    

    可读又可写(仅做了解)

    可写可读 r+
    
    # with open('test.py', 'r+', encoding='utf8') as fr:
    #     # print(fr.readable())
    #     # print(fr.writable())
    #     fr.write('高级')  # 光标在文件头部,覆盖后面的字符
    
    
    可写可读 w+ 和 w 没有任何区别
    # with open('test.py', 'w+', encoding='utf8') as fw:
    #     print(fw.readable())
    #     print(fw.writable())
    
    可写可读 a+ a模式默认光标在尾部
    # with open('test.py','a+',encoding='utf8') as fw:
    #     print(fw.readable())
    #     print(fw.writable())
    #     fw.seek(0,0)
    #     print(fw.read())
    
    
    # 综上:如果你真的有即可读又可写的需求,用两种不同的模式打开两次文件
    

    三、光标的移动

    1.文件指针

    文件指针用于标明文件读写的起始位置。

    文件指针概念示意图

    通过移动文件指针的位置,再借助 read() 和 write() 函数,就可以轻松实现,读取文件中指定位置的数据(或者向文件中的指定位置写入数据)。

    注意,当向文件中写入数据时,如果不是文件的尾部,写入位置的原有数据不会自行向后移动,新写入的数据会将文件中处于该位置的数据直接覆盖掉。
    

    2.tell()函数

    tell() 函数用于判断文件指针当前所处的位置

    file.tell() file表示文件对象

    # 文本a的内容是  http://c.biancheng.net
    f = open("a.txt",'r')
    print(f.tell())      # 0
    print(f.read(3))	# htt
    print(f.tell())		# 3
    可以看到,当使用 open() 函数打开文件时,文件指针的起始位置为 0,表示位于文件的开头处,当使用 read() 函数从文件中读取 3 个字符之后,文件指针同时向后移动了 3 个字符的位置
    

    3.seek()函数

    seek() 函数用于移动文件指针到文件的指定位置。

    file.seek(offset[, whence])

    • file:表示文件对象;
    • whence:作为可选参数,用于指定文件指针要放置的位置,该参数的参数值有 3 个选择:0 代表文件头(默认值)、1 代表当前位置、2 代表文件尾。
    • offset:表示相对于 whence 位置文件指针的偏移量,正数表示向后偏移,负数表示向前偏移。

    文件修改

    缓存文件的原理

    文件没有修改一说,只有覆盖。(缓存文件的原理)
    创建一个新的文件修改,并复制,覆盖旧的文件。
    # 同时打开多个文件
    with open('1.py','rt',encoding='utf-8') as fr , open('2.py','wt',encoding='utf-8') as fw:
        #  用逗号隔开open的两个文件
        
        data = fr.read()
        # 读取1(fr)里的内容并赋值变量  data
    
        data = data.replace('快乐','抄袭')
    	# 这里是修改操作,将字符替换。
        
        fw.write(data)
        # 2号文件(fw)写入1号(fr)的内容
        #  此时自动创建1.py文件,并写入更改后的1.py内容
        
    import os
    # 导入os模块
    os.remove('1.py')
    # 删除原文件
    os.renames('2.py','1.py')
    # 重命名新文件
    
  • 相关阅读:
    600E
    题解报告:hdu 1124 Factorial(求N!尾数有多少个0。)
    求N!尾数有多少个0。
    poj 2185 Milking Grid(二维kmp)
    poj 2752 Seek the Name, Seek the Fame(kmp前缀表prefix_table的运用)
    hdu 1686 Oulipo(裸KMP)
    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛-B-Perfect Numbers(完数)
    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛-K-Matrix Multiplication(矩阵乘法)
    poj 3468 A Simple Problem with Integers(线段树区间lazy标记修改or树状数组)
    hdu 1698 Just a Hook(线段树区间lazy标记修改)
  • 原文地址:https://www.cnblogs.com/fwzzz/p/11544647.html
Copyright © 2011-2022 走看看