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

    文件操作

    首先新建一个文件  比如      模特主妇护士班主任.txt 

    计算机想要访问这个文件需要经历的步骤是:

    1、文件路径:d:模特主妇护士班主任.txt

    2、编码方式:utf-8 gbk ....

    3、操作方法:只读、只写、追加、读写、if 写读....:

    4、以什么编码方式储存的文件,就以什么编码方式打开进行操作。

    什么是绝对路径和相对路径?

    绝对路径是文件直接存储在计算机的硬盘里,比如直接存储在C盘里、D盘里或是E盘里;

    相对路径是文件没有直接存储在计算机的硬盘里,比如存储在C盘里的一个文件夹中等。

    文件编码

     f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,

    在windows下是gbk,在linux下是utf-8。

    f = open('模特主妇护士班主任',mode='r',encoding='utf-8')

    只读文件:'r'代表只读方式 'rb'直接编码成bytes类型(非文字文件,还有就是上传和下载)     

    1.读文件的第一种方式:read方法,用read方法会一次性的读出文件中的所有内容

    f = open('模特主妇护士班主任',mode='r',encoding='utf-8')   
    content = f.read()
    print(content)
    f.close()

    2.读一部分内容:read(n),指定读n个单位

    print(f.read(5))

    3.读文件的第三种方式:按照行读,每次执行readline就会往下读一行

    print('readline : ',content.strip())    #strip去掉空格、制表符、换行符
    content2 = f.readline()
    print(content2.strip())
    
    print(1)  #--> 1
    
    print('1
    ')  #--> 1
    
    

    4.读文件的第四种方式:readlines,返回一个列表,将文件中的每一行作为列表中的每一项返回一个列表

    content = f.readlines()
    print('readlines : ',content)

    5.读:最常用    for循环

    f = open('模特主妇护士班主任,encoding='utf-8')
    for l in f:
        print(l.strip())

    关闭文件             f.close()      必须在程序最后加上这个,可以清理内存。

    f = open('模特主妇护士班主任',mode='rb',)
    content = f.read()
    print(content)
    f.close()

     只写文件:只写:w          没有此文件,就会创建文件

    #对于w:没有此文件就会创建文件
    f = open('log',mode='w',encoding='utf-8')
    f.write('骑兵步兵')
    f.close()
    
    先将源文件的内容全部清除,在写。
    f = open('log',mode='w',encoding='utf-8')
    f.write('附近看到类似纠纷')
    f.close()
    
    
    f = open('log',mode='w+',encoding='utf-8')
    f.write('aaa')
    f.seek(0)
    print(f.read())
    f.close()
    
    
    f = open('log',mode='wb')
    f.write('附近看到类似纠纷'.encode('utf-8'))
    f.close()

     追加

    f = open('log',mode='a',encoding='utf-8')
    f.write('佳琪')
    f.close()
    
    f = open('log',mode='a',encoding='utf-8')
    f.write('佳琪')
    f.close()

    # 带+号的增加有附带功能,比如r+代表在只读的情况下增加了写的功能,代表先读后写,其余的情况类似。

    其他功能详解

    obj = open('log',mode='r+',encoding='utf-8')
    content = f.read(3)  # 读出来的都是字符
    f.seek(3)  # 是按照字节定光标的位置
    f.tell() 告诉你光标的位置
    print(f.tell())
    content = f.read()
    print(content)
    f.tell()
    f.readable()  # 是否刻度
    line = f.readline()  # 一行一行的读
    line = f.readlines()  # 每一行当成列表中的一个元素,添加到list中
    f.truncate(4)
    for line in f:
        print(line)
    f.close()

    seek  是按照字节移动光标

    tell   是告诉你目前光标的位置

    例题:用户先注册账号和密码到一个文件里,然后等待用户登录,从文件里调出注册的账号和密码与之比较,正确登陆成功,允许有三次错误登陆机会

    username = input('请输入你要注册的用户名:')
    password = input('请输入你要注册的密码:')
    with open('list_of_info',mode='w',encoding='utf-8') as f:
        f.write('{}
    {}'.format(username,password))
    print('恭喜您,注册成功')
    lis = []
    i = 0
    while i < 3:
        usn = input('请输入你的用户名:')
        pwd = input('请输入你的密码:')
        with open('list_of_info',mode='r+',encoding='utf-8') as f1:
            for line in f1:
                lis.append(line)
        if usn == lis[0].strip() and pwd == lis[1].strip():
            print('登录成功')
            break
        else:print('账号和密码错误')
        i+=1

     总结:

    # 文件处理
        # 打开文件
            #open('路径','打开方式','指定编码方式')
            # 打开方式 r w a r+ w+ a+ b     用的最多就是r w a ,带+号的一般不用,不管是先读后写还是先写后读都会让光标发生变化,
                                            # 所以最好读写不要在一起
                #r+ 打开文件直接写 和读完再写
            # 编码方式 —— utf-8
        # 操作文件
            #
                # read 一次性读
                # readlines 一次性读
                # readline 一行一行读
                    #不知道在哪儿结束
                    #视频 图片 rb bytes 按照字节读
                # for循环 —— 最好!!!
            #
                # write
            # 光标 —— 文件指针
                #seek _ 指定光标移动到某个位置
                #tell _ 获取光标当前的位置
                #truncate _ 截取文件
        # 关闭文件
            #close

     修改文件实例

    修改文件

    思路:把原有文件的内容先修改,然后把修改后的文件全部放在一个新的空文件里,把原文件删除

    with open('小护士班主任',encoding='utf-8') as f,open('小护士班主任.bak','w',encoding='utf-8') as f2:
        for line in f:
            if '星儿' in line:  #班主任:星儿
                line = line.replace('星儿','啊娇')
            #写文件
            f2.write(line) #小护士:金老板
    
    import os
    os.remove('小护士班主任') #删除文件
    os.rename('小护士班主任.bak','小护士班主任')  #重命名文件
  • 相关阅读:
    基于keepalived双主模型的高可用LVS
    ViewFlipper实现ViewPager的页面切换效果
    C++,Python,Go对照学习-01
    matlab figure 调整大小、字体、线宽
    学术研究 —— 常用结论、说法
    学术研究 —— 常用结论、说法
    OpenGL(十六) 鼠标、键盘交互响应事件
    N+1:创新点的设计
    N+1:创新点的设计
    数学中的物理、几何概念与含义
  • 原文地址:https://www.cnblogs.com/DI-DIAO/p/8110909.html
Copyright © 2011-2022 走看看