zoukankan      html  css  js  c++  java
  • python基础|文件操作

    文件操作 

      文件是操作系统提供给用户操作复杂硬件的载体。开发者/管理员,应用程序需要永久保存数据,就需要文件这种载体。在python中操作文件有两种方式

    方式一

    f = open(r'文件路径')      # 向操作系统发送请求,读取文件
    print(f)                    # f是文件对象
    print(f.read())           # 打印读出的内容 window操作系统默认以gbk模式解码数据
    f.close()                    # 关闭文件

      文件路径有两种,一种是绝对路径,如:D:pycharmEducation课程python基础4,文件操作a.txt。这就是一种绝对路径,告诉系统文件在哪里。另一种便是相对路径,如:a.txt。这是相对路径。相对路径有要求,必须在运行文件操作程序同级文件夹下,下级文件和上级文件夹下都无法读取。此为,在文件前加‘r'告诉系统这是文件路径,其中 ,都是文件路径格式,没有其他任何意义。当然不闲麻烦还可以:D://pycharm/Education/课程/python基础4,文件操作a.txt。还可以这种方式写文件路径。

      在这种模式下读取完文件后,一定要关闭一下读取文件操作。f.close(),如果我们不关闭文件,那么系统不会立即关闭读取文件的请求,这样会占用系统的资源。

    方式二

      上下文操作。

    with open(r'文件路径‘) as f:
    # 或者
    with open(r'文件路径’)as f, open(r'文件路径‘)as f1:
    同时打开多个文件
        

      这种方式下打开文件,当我们回车写指令对文件操作。指令缩进,所有的程序指令就这这个文件操作的子代码块。如果想要关闭。就和这with对齐,成为同级代码,python程序就会关闭对这个文件系统请求操作。

      对于文件操作的模式有三种:1,'r'只读模式,'w'只写模式,'a'追加写模式。操作文件单位的有两种方式。t文本文件方式;b二进制文件方式。二进制文件方式视频,图片等我们都可以用这种模式。

    文件操作"with open(r'文件路径', mode = 'rt', encoding = 'utf-8')“,其中”mode=' ' ”就是操作模式的选择,encoding = '' 就是以什么格式经行解码。在mode 位置也可以不写mode = ''  ,直接写’r',python默认是t文本文件。

      在'r'只读模式下,如果文件不存在,系统会报错。读文件,当文件内容读完后,在进行读操作只能读到空白。

    # 只读模式下的内置操作
    f.readable()    # 判读是否可读
    f.read()        # 读取信息
    f.readline()    # 对文件单行数据读取
    f.readlines()  # 读取文件所有行

      在'w‘只写模式下,如果文件不存在,那么将会自动创建以该名命名的一个文件。写文件时,写的信息会覆盖原来的信息,是原来的信息会丢失。

    # 只读模式的内置操作
    f.writable()    # 判读是否可写
    f.write()       # 写数据到文件
    f.writelines()    # 对文件单行数据读取

      在'a‘追加写模式下,不会覆盖原来的数据,在文本文件信息末尾出追加,进行写操作。

    在这三种模式下还有可读可写模式'r+t', 'w+t' 和 'a+t’模式。

            在读模式下,使用f.read(1),在内置函数read()内可以放置int型参数。这个参数表读取位置的参数。在'rt‘模式下,存入的方式是以'utf-8',我们可以读取文本文件的第1个汉字或字母。这就是实现对文件的选择性读取了。

    # a.txt文件内容
    商品      价格
    mac       8600
    iphone    8900
    联想电脑  5200
    玩具      364
    # 文件的第一字是商
    # py文件读程序
    with open(r'a.txt', 'rt', encoding='utf-8') as f:
        rec = f.read(1)     # 读取第一个字  
        print(rec)
    >>># 当read()参数改为2时
    >>>商品

      选择型读取还有以seek()的内置函数需要了解。写f.seek(),我们使用ctrl键鼠标放在seek上发现这里需要放置两个参数f.seek(offset, whence)。offset代表的是指针移动的字节数,whence是代表参照什么位置移动的。当whence = 0,表示在文件开头,并且在t和b模式下都可以使用。whence = 1,表示参照当前所在位置,必须在b模式下使用。whence = 2 ,表示参照末尾,也必须在b模式下使用。

      

    # a.txt文档,在gbk模式下存入的
    meKing在学习还是在把妹
    # py文件
    with open(r'a.txt', 'rb') as f:
        f.seek(6, 1)       # 在第六个Btes开始,每个英文字母占1Btes,中文字符占用2Btes
        rec = f.read(2).decode('gbk')   # 读取2Btes,用gbk编码解码
        print(rec)
    >>>在

      whence=2时,的读取位置将在末尾。利用此功能可以做一文件检测的功能

    # py写文件
    import time
    A = time.strftime('%Y-%m-%d %X')
    print(A)
    with open(r'b.txt', 'a', encoding='utf-8') as f:
        f.write('%s  meKing在学习
    '%A)
    
    # 检测文件是否写入
    with open(r'b.txt', 'rb') as f:
        f.seek(0, 2)        # whence = 2模式。光标位置在b文件末尾
        while True:
            s = f.readline()    # 读取从之前末尾读往后一行
            if s:           # 如果有写入,便可以读取内容
                print(f.tell())    # tell(),查光标位置
                print("新增的文件内容:%s" % s.decode('utf-8'))

      文件修改的两种方式

    '''
    方式一
    1,先把原文件内容读出 2 ,对文件内容经行更改 3,把更改好的新内容写入,覆盖原文件 ''' with open(r'a.txt','r',encoding='utf-8') as f: a = f.read() # print(a) b = a.replace('女朋友', '玩具') # print(b) with open(r'a.txt', 'w', encoding='utf-8') as f1: f1.write(b) print('over')
    '''
    方式二
    1,同时操作两个文件
    2,将原文件的内容逐行读出经行修改,写入新文件内
    3,完成后,删除原文件,将新文件名改成原文件名
    '''
    import os
    with open(r'a.txt', 'r', encoding='utf-8') as read_f,
            open(r'a1.txt', 'a', encoding='utf-8') as writre_f:   #原文件读,新文件写操作
        a = read_f.read()
        a = a.replace('女朋友', '玩具')  # 修改文件内容
        for line in a:
            new_line = line
            writre_f.write(new_line)   # 逐行写入新文件
    os.remove(r'a.txt')     # 删除原文件   
    os.replace('a1.txt', 'a.txt')    # 偷梁换柱,改成原文件名字

     

  • 相关阅读:
    Java代码实现WORD转PDF
    用Java实现在【520,1314】之间生成随机整数的故事
    solr 6.5.1 linux 环境安装
    并发编程学习笔记(15)----Executor框架的使用
    并发编程学习笔记(14)----ThreadPoolExecutor(线程池)的使用及原理
    并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理
    并发编程学习笔记(12)----Fork/Join框架
    并发编程学习笔记(11)----FutureTask的使用及实现
    并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理
    服务器被植入木马,CPU飙升200%
  • 原文地址:https://www.cnblogs.com/huaiXin/p/11143391.html
Copyright © 2011-2022 走看看