zoukankan      html  css  js  c++  java
  • 文件,文件的打开,拷贝,写入

    什么是文件

    文件是操作系统提供的虚拟的单位,有了文件我们可以读取数据,没有文件的话应该去硬盘上扣动机械手臂然后寻找数据.

    如何使用文件

    1. 打开文件()

    2. 读写数据

    3. 保存

    4. 关闭文件

    f = open(r'C:Users ickcDesktop est.txt',encoding='gbk') # 相当于你打开的文件

    print(f.read()) # 一次性读取所有的内容

    print(1,f.read())

    readline读取一行,如果读完了所有数据,继续读取为空

    f = open(r'C:Users ickcDesktop est.txt',encoding='gbk') # 相当于你打开的文件

    print(f.read()) # 一次性读取所有的内容

    print(1,f.read())

    del f # 只删除了变量名,但是文件对于操作系统来讲,还是打开状态的

    fr = open(r'C:Users ickcDesktop est.txt',encoding='gbk') # 相当于你打开的文件

    print(fr.read()) # 一次性读取所有的内容

    fr.close() # 不仅删除了变量名f,并且也关闭了文件,这个时候文件对于操作系统来讲是关闭状态的

    fw = open(r'C:Users ickcDesktop est.txt',mode='w',encoding='gbk') # 相当于你打开的文件

    print(fw.write('nick 很衰')) # 写入内容, 清空文件后写入

    fw.close() # 不仅删除了变量名f,并且也关闭了文件,这个时候文件对于操作系统来讲是关闭状态的

    fw = o 不仅删除了变量名f,并且也关闭了文件,这个时候文件对于操作系统来讲是关闭状态的pen(r'D:Python视频Python9期视频 day09 est.txt',mode='w',encoding='utf8') # 相当于你打开的文件

    fw.write('nick 很帅1111111') # 写入内容, 清空文件后写入

    fw.flush() # 快速刷入硬盘

    fw.close() #

     

    绝对路径和相对路径

    绝对路径:从根目录开始,一直到你需要的文件路径

    相对路径:从当前文件夹开始,到你需要的文件路径,只需要输入文件路径,要打开的文件必须和运行的py文件必须得在一个文件夹下

    文件的三种打开方式

    mode='r',只读
    fr = open('test.txt',mode='r',encoding='utf8')  # 默认r=rt
    data = fr.read()
    print(data)

    mode ='w',只写,清空文件在写入

    fr = open('test.txt',mode='r',encoding='utf8')  # 默认r=rt
    data = fr.read()
    print(data)

    mode = 'a',追加,在后面追加写入文件

    fr = open('test.txt',mode='a',encoding='utf8')  # 默认r=rt
    data = fr.write('nick 全裸写真集')
    print(data)


    mode= 'rt'  # 打开的text文本类型 # nick 很帅(utf8) --> utf8 nick 很帅
    fr = open('test.txt', mode='rt', encoding='gbk')  # 默认r=rt
    text_data = fr.read()
    print(text_data)

    mode = 'rb'  # 打开的bytes类型,二进制 # 010101010110010
    fr = open(r'D:Python视频Python9期视频day 09 est.txt', mode='rb')  # 默认r=rt
    print(fr)
    bytes_data = fr.read()
    print(bytes_data)

    # r,r告诉接下来的字符串,里面所有的特殊字符都变得无意义
    print('1\t2')
    print('1 2')
    print(r'1 2')  # '1\n\t2'

    # b表示,你写的字符串为二进制,在打印的时候不需要使用终端的编码处理,直接打印原生的二进制即可
    print(b'xe5xbex88xe8xa1xb0')



    t和b不能单独使用,必须得和r/w/a一起使用
    r/w/a能单独使用


    # fr = open('test.txt','r',encoding='utf8')
    # data = fr.read()
    # print(data)
    # fr.close()


    # with open(文件路径,打开模式(rt/wt/at/rb/wb/ab),编码格式) as 变量名:
       # 变量名.read/write
    with open('test.txt','r',encoding='utf8') as fr:
       data = fr.read()
       print(data)

    name = 'nick'
    print(name)
    # r只读/w只写/a追加,可读可写(不推荐使用)r+,w+,a+
    # with open('test.txt','r',encoding='utf8') as fr:
    #     print(fr.readable())
    #     print(fr.writable())
    #     data = fr.readline()
    #     print(data)
    #
    #
    # with open('test.txt', 'w', encoding='utf8') as fw:
    #     print(fw.readable())
    #     print(fw.writable())
    #     fw.write('nick handsome245234234')
    #     fw.flush()



    # with open('test.txt','r+',encoding='utf8') as fr:
    #     print(fr.readable())
    #     print(fr.writable())
    #     data = fr.readline()
    #     fr.write('nick handsome245234234')
    #     fr.flush()

    # 指针(不要使用指针)
    with open('test.txt','rt+',encoding='utf8') as fa:
       # 3个字节,
       # fa.readline()
       fa.seek(5, 0)  # 字节算的
       # fa.seek(3, 1)
       print(fa.tell())  # 告诉你光标当前的位置
       print(fa.read(3))  # 光标后的字符个数,一个中文1个字符,3个字节;一个英文一个字符,一个字节
       fa.truncate(3) # 如果它有参数,则光标会跳到指定字节数后,然后把后面的文件全部清空
       fa.flush()
    # 文件不能插入,但是有需求要修改文件,插入.
    # with open('test.txt', 'r', encoding='utf8') as fr:
    #     data = fr.read()
    #     data = data.replace('sb', '帅逼')
    #     print(data)
    #
    # with open('test_swap.txt', 'w', encoding='utf8') as fw:
    #     fw.write(data)
    #
    # import os
    #
    # os.remove('test.txt')
    # os.rename('test_swap.txt', 'test.txt')


    '''

    qq想修改这个程序,微信也想修改这个程序,两者都已经读取文件成功,都拿到了`tank dsb`

    qq想修改`tank dsb`中的`s`为`a`,微信想把`s`修改成`b`,这两个修改一定有先后顺序,假设qq先修改,
    那么`s`已经变成了`a`,但是微信找的到`s`吗?,找不到了,报错.

    qq想修改`tank dsb`中的`s`为`a`,微信想把`s`修改成`b`,所以我给qq一份拷贝文件,我给微信一份拷贝文件,
    然后让他们各自修改,修改成功后,删除原文件,修改替换后的文件名为原文件
    '''

    # with open('test.txt', 'r', encoding='utf8') as fr,
    #         open('test_swap.txt', 'w', encoding='utf8') as fw:
    #     data = fr.read()
    #     data = data.replace('sb', '帅逼')
    #     fw.write(data)
    #     print(data)
    #
    # import os
    #
    # os.remove('test.txt')
    # os.rename('test_swap.txt', 'test.txt')


    # with open('test.txt', 'r', encoding='utf8') as fr,
    #         open('test_swap.txt', 'w', encoding='utf8') as fw:
    #     data = fr.read()
    #     data = data.replace('sb', '帅逼')
    #     fw.write(data)
    #     print(data)
    #
    # import os
    #
    # os.remove('test.txt')
    # os.rename('test_swap.txt', 'test.txt')

    # with open('test.txt', 'r',encoding='utf8') as fr:
    # # #     # print(fr.readlines())
    # # #
    # # #     # for i in fr.readlines():
    # # #     #     print(i)
    # # #     print('*'*50)
    # # #     for i in fr:   # 这样获取更省内存
    # # #         print(i)
    # # #     print(fr)

    # 减少了内存的占用
    with open('test.txt', 'r', encoding='utf8') as fr,
           open('test_swap.txt', 'w', encoding='utf8') as fw:  # w在清空文件,而不是write清空文件
       '''
      tank dsb

      tank dsb

      tank dsb

      tank dsb
      '''
       for i in fr:
           i = i.replace('sb', '帅逼')
           fw.write(i)

    import os

    os.remove('test.txt')
    os.rename('test_swap.txt', 'test.txt')




    # 文件只需要记住

    # 1. with open(filename,mode,encoding) as file:
    #         file+操作

    # 2. rt/rb/wt/at

    # 3. 文件的复制

     

  • 相关阅读:
    Jquery中的bind()方法绑定事件总结
    composer常用命令
    Activity四种启动模式
    谷歌搜索技巧
    关于Android studio Haxm加速器安装
    关于Ping和Tracert命令原理详解
    皮尔逊相关系数
    head标签
    wireshark抓包
    数据结构与算法自学系列之动态规划(一)
  • 原文地址:https://www.cnblogs.com/zrx19960128/p/10939952.html
Copyright © 2011-2022 走看看