zoukankan      html  css  js  c++  java
  • python基础:第三篇文件打开

    一、文件打开操作

    1.Python开发文件函数介绍

    Python2中:open、file这两个函数用法一样。

    Python3中:只有open函数。

    2.打开文件操作流程

    第一,打开文件得到文件对象。f=open('a.txt','w')

    第二,通过文件对象操作文件(增删改查)。f.write('111111 ')

    第三,关闭文件对象(clse)。 f.close()

    f = open('a.txt') #如果不加读或者写参数默认是读
    first_line = f.readline()
    print(first_line)
    f.close()

    3.文件编码格式

    如果不指定文件的打开编码encoding使用系统默认的编码格式windows是gbk,linux是utf-8

    4.文件的几种打开模式

      1.单一模式

    1. r ,只读模式:默认模式不加默认是r模式
    2. w,只写模式:写模式,清空文件内容并重写写入
    3. x, 只写模式:不可读;不存在则创建,存在则报错
    4. a, 追加模式:可读, 不存在则创建;存在则只追加内容

      2.两种模式

      "+" 表示可以同时读写某个文件

    1. r+, 读写:可读,可写
    2. w+,写读:可读,可写
    3. x+ ,写读:可读,可写
    4. a+, 写读:可读,可写

      3.以字节的方式打来文件

    1. rb  或 r+b
    2. wb 或 w+b
    3. xb 或 w+b
    4. ab 或 a+b

    二、文件打开函数

    open(“文件”,“模式”,“编码”)

    f = open('a.txt', encoding='utf-8', mode='r')

    open参数

    • encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk;
    • mode文件打开模式,r、w、a为打开文件的基本模式,对应着只读、只写、追加模式;

    三、操作

    1.常用

    读文档数据操作

    f=open('a.txt','w')
    f.write('111111
    ')
    f.close()
    

    读文档操作

    f=open('a.txt','r')
    f.read('111111
    ')
    f.close()
    

    一次读取多个文件

    with open('a.txt','r',encoding='utf-8') as f,open('b.txt') as b_f:
        print(f.read())
        print('====>')
    

    上下文管理

    with open('a.txt','r') as read_f,open('b.txt','w') as write_f:
        data=read_f.read()#先读出b文件内容
        write_f.write(data)#在写入a文件
    

    补充重要小知识点循环后边else用法

    当循成功完成不被打断才会运行else内容

    #for循环 
    for i in range(3): print(i) # continue if i == 1: break else: print('=============>') #当for循环不被break打断,就会执行else的代码
    #while循环

    i=0
    while i< 5:
    print(i)
    i+=1
    if i == 3:
    break
    else:
    print('------>')

    应用场景实例

     with open('a.txt','r',encoding='utf-8') as read_f,
         open('aa.txt','w',encoding='utf-8') as write_f:
    
        for line in read_f:
            write_f.write(line)
        else:
             print('write successfull')
    f.close()
    # print(f.closed) #判断文件是否是关闭状态
    # print(f.readable()) #判断文件是否是r模式打开的

    # print(f.readline(),end='') #一次读一行
    # print(f.readline())
    # print(f.readline(),end='')
    # print(f.readlines()) #读取所有行的内容,存成列表的形式
    # f=open('a.txt','w',encoding='utf-8')
    # # f=open('b.txt','r',encoding='utf-8') #以读的方式打开文件,文件不存在则报错
    # f=open('b.txt','w',encoding='utf-8')
    # # print(f.writable())

      

    文件修改

    #!/usr/bin/Python
    # -*- coding:utf-8 -*-
    import os
    with open("a.txt","r",encoding="utf-8") as read_f,
         open("a.txt.awp","w",encoding="utf-8") as w_f:
        for line in read_f:
            print(line)
            # if line.startswith("11"):
            line = "1
    "
            w_f.write(line)
    os.remove("a.txt")
    os.rename("a.txt.awp","a.txt")
    

    光标位置

    # with open('b.txt','rb') as f:
        # f.read()
        # f.seek(3) #默认情况,是以文件起始位置作为开始,往后移动3个bytes
        # f.read(1)
        # print(f.tell())
        # f.seek(2,1) #1 代表以当前光标所在的位置为开始,往后移动2个 bytes
        # print(f.tell())
    
        # f.seek(-1,2) #2表以当前光标所在的位置为开始,往后移动2个 bytes
        # print(f.tell())
    
        # f.seek(0,2)
    

      

    # tail -f access.log
    import time
    with open('access.log','r',encoding='utf-8') as f:
        f.seek(0,2)
        while True:
            line=f.readline().strip()
            if line:
                print('新增一行日志',line)
            time.sleep(0.5)
    

    以二进制方式读取

    #以二进制方式读
    with open('a.txt','rb') as f:
         print(f.read().dncode('utf-8'))#需要将二进制转换
    
    
    #以二进制方式写
    with open('c.txt','wb') as f:
         f.write('哈哈哈'.encode('utf-8'))


    f=open('sb.jpg','r',encoding='utf-8') #文本的方式读不了二进制文件
      print(f.read())

    应用:复制照片文件

    # with open('sb.jpg','rb') as read_f,
    #         open('sb_alex.jpg','wb') as write_f:
    #     data=read_f.read()
    #     write_f.write(data)
    

      

    不常用的功能

    # with open('a.txt','r',encoding='utf-8') as f:
    #     print(f.read(4)) #数字指的是读的是字符
    #
    # with open('a.txt','rb') as f:
    #     print(f.read(1)) #数字指的是读的是字符
    
    
    # with open('a.txt','r',encoding='utf-8') as f:
    #     f.seek(3) #seek内指定的数字代表字节
    #     print(f.tell()) #当前光标所在的位置
    #     print(f.read())
    
    # with open('aa.txt','r+',encoding='utf-8') as f:
    #     # f.seek(3) #seek内指定的数字代表字节
    #     # print(f.read())
    #
    #     f.truncate(1)
    
    
    # with open('b.txt','rb') as f:
        # f.read()
        # f.seek(3) #默认情况,是以文件起始位置作为开始,往后移动3个bytes
        # f.read(1)
        # print(f.tell())
        # f.seek(2,1) #1 代表以当前光标所在的位置为开始,往后移动2个 bytes
        # print(f.tell())
    
        # f.seek(-1,2) #2表以当前光标所在的位置为开始,往后移动2个 bytes
        # print(f.tell())
    
        # f.seek(0,2)
    
    # with open('c.txt','r',encoding='utf-8') as f:
    #     f.seek(0,2)
    #     print('====>',f.read())
    

      

  • 相关阅读:
    http://www.cnblogs.com/Javame/p/3632473.html
    在eclipse中新建Dynamic web project时选择2.5和3.0的区别(里面涉及servlet和tomcat的问题)
    图的理解:深度优先和广度优先遍历及其 Java 实现
    解决ORA-28000: the account is locked
    [MAT]使用MAT比較多个heap dump文件
    ansible学习之--简单学习笔记1
    awk基本使用方法简单介绍
    已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行
    程序实践系列之库源码
    Android常见UI组件之ListView(二)——定制ListView
  • 原文地址:https://www.cnblogs.com/hanjialong/p/6861956.html
Copyright © 2011-2022 走看看