zoukankan      html  css  js  c++  java
  • 3127文件操作

    查IP地址:终端(功能键+R)+cmd+ipconfig

    一,文件操作基本流程。

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

    参数:1,文件路径。
    2,编码方式。encode。
    3,执行动作(打开方式):只读,只写,追加,读写,写读....

    f:变量,f_obj,file,f_handler,...文件句柄。

    open windows的系统功能,windows默认编码方式:gbk,linux默认编码方式utf-8。f.close()

    绝对路径:从根目录开始,一级一级查找知道找到文件。  D:护士老师主妇空姐联系方式.txt
    相对路径:在同一个文件夹下,直接写文件名即可。

    报错处理:
    /U//UU

    #'C:log.txt'
    第一种:r'C:log.txt'
    第二种:C:\log.txt
    as.txt
    f = open('D:护士老师主妇空姐联系方式.txt',encoding='utf-8',mode='r')
    content = f.read()
    print(content)
    f.close()    #打不开的解决办法:查看格式,路径的引号,顺序。在路径前加r((r'D:护士老师主妇空姐联系方式),或者将\变为\\

    二,文件编码

    编码不一致时:
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb7 in position 0: invalid start byte
    文件以什么编码方式存储的,就以什么编码方式打开。利用之前学的编码转换

    三,文件的打开模式

    1. 打开文件的模式有(默认为文本模式):
    r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    w,只写模式【不可读;不存在则创建;存在则清空内容】
    a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】
    五种方式:
        1:全部读出来f.read()
        f = open('log',encoding='utf-8')
        content = f.read()
        print(content,type(content))
        f.close()
    
        2:一行一行的读
        f = open('log',encoding='utf-8')
        print(f.readline())
        print(f.readline())
        print(f.readline())
        print(f.readline())
        print(f.readline())
        f.close()
    
        3:将原文件的每一行作为一哥列表的元素。
        f = open('log',encoding='utf-8')
        print(f.readlines())
        f.close()
    
        4:读取一部分read(n)。
        在r模式下,read(n)按照字符去读取。
        在rb模式下,read(n)按照字节去读取。
        f = open('log',encoding='utf-8')
        print(f.read(3))
        f.close()
        f = open('log',mode='rb')
        content = f.read(4)
        print(content)
        f.close()
    
        5:循环读取。
        f = open('log',encoding='utf-8')
        for i in f:
            print(i.strip())
        f.close()

    这种方法,占用内存极少。不会把文件所有内容写入内存,而只是每次把一行的内容写入到内存。当下一次循环时,

    上一次内存的内容被覆盖。所以整个程序 执行完成,内存只保存了一行的内容。

    非文字类的文件时,用rb
    rb,只读,以bytes类型读取。

    f = open('D:护士老师主妇空姐联系方式.txt',mode='rb')
    content = f.read()
    print(content)
    f.close()

    r+ 先读,后追加 一定要先读后写
    f = open('log',encoding='utf-8',mode='r+')
    content = f.read()
    print(content)
    f.write('aaa')
    f.close()

    错误的  #先写后读,随着光标的移动,文件内容会被覆盖。
    f = open('log',encoding='utf-8',mode='r+')
    f.write('BBB')
    content = f.read()
    print(content)
    f.close()
    写:
    w
    没有文件,创建一个文件写入内容
    f = open('log1',encoding='utf-8',mode='w')
    f.write('儿科王金发;剪短发了肯定撒就废了;就')
    f.close()

    有文件,将原文件内容清空,在写入内容。
    f = open('log1',encoding='utf-8',mode='w')
    f.write('666')
    f.close()
    w+ 先写后读。
    f = open('log',encoding='utf-8',mode='w+')
    f.write('中国')

    #print(f.tell()) # .tell()按字节去读光标位置
    f.seek(3) #seek(3) 按照字节调整光标位置
    print(f.read())
    f.close()


    truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,
    因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果。
    f = open('log',encoding='utf-8',mode='a')
    f.truncate(7) # 按字节对原文件截取
    f.close()
    
    

     五,文件的修改。

     文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果。

     文件修改的过程:

    1,将原文件读取到内存。
    2,在内存中进行修改,形成新的内容。
    3,将新的字符串写入新文件。
    4,将原文件删除。
    5,将新文件重命名成原文件。

    import os  #引入模块 os
    with open('log',encoding='utf-8') as f1,
        open('log.bak',encoding='utf-8',mode='w') as f2:
        content = f1.read()
        new_content = content.replace('alex','SB')
        f2.write(new_content)
    os.remove('log')  #删除旧文件
    os.rename('log.bak','log')   #重命名新文件
  • 相关阅读:
    修复VirtualBox "This kernel requires the following features not present on the CPU: pae Unable to boot – please use a kernel appropriate for your CPU"
    前几天入手一大菠萝,写个初始化教程
    CentOS 安装 Mogodb(在线 && 离线)
    Mongodb中经常出现的错误(汇总)child process failed, exited with error number
    XShell删除键之类的不正常
    XFtp中文乱码解决
    Xshell不能连接SSH的解决(附Kali2.0 SSH连接)
    Virtual Box 工具栏(菜单栏)消失的解决方法
    Kali无法定位软件包的解决方案
    数据库备份相关
  • 原文地址:https://www.cnblogs.com/Mr-Murray/p/8659532.html
Copyright © 2011-2022 走看看