• Python进阶4---Python的文件IO


     文件操作

    体存储单元,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。只不过因为RAM是其中最重要的存储器。
    通常所说的内存即指电脑系统中的RAM。RAM要求每时每刻都不断地供电,否则数据会丢失。
    如果在关闭电源以后RAM中的数据也不丢失就好了,这样就可以在每一次开机时都保证电脑处于上一次关机的状态,而不必每次都重新启动电脑,重新打开应用程序了。
    但是RAM要求不断的电源供应,那有没有办法解决这个问题呢?随着技术的进步,人们想到了一个办法,即给RAM供应少量的电源保持RAM的数据不丢失,这就是电脑的
    休眠功能,特别在Win2000里这个功能得到了很好的应用,休眠时电源处于连接状态,但是耗费少量的电能。

    文件IO常用操作

     

    打开操作

     

    open的参数

    file

    mode***

      

    a

    字符流:<_io.TextIOWrapper name='test1' mode='r+' encoding='cp936'>
    字节流:<_io.BufferedRandom name='test1'>

    注意在windows(cp936:双字节编码)下面以二进制读取文件和在linux(utf-8::三字节编码)下面以二进制读取文件时因为编码格式不同,其读取出来的数据也会不同。

    上述原因与文件指针有关!

     文件指针***

    文件指针,指向当前字节位置

    seek无论是在二进制模式下还是在文本模式下,seek指的都是偏移字节!
    

    buffering:缓冲区

    -1表示使用缺省大小的buffering,如果是二进制模式,使用io.DEFAULT_BUFFER_SIZE,默认是4096。
    缓冲是一个可选的整数,用于设置缓冲策略。传递0以关闭缓冲(仅在二进制模式下允许),1选择行缓冲(仅在文本模式下可用),以及整数>1以字节表示固定大小块缓冲区的大小。
    二进制文件以固定大小的块缓冲;在许多系统上,缓冲区通常是4096或8192字节长。 
    
    一般来说,默认缓冲区大小是个比较好的选择,除非明确知道,否则不调整它。
    一般编程中,明确知道需要写磁盘了,都会手动调用一次flush,而不是等到自动flish或者close的时候。

     encoding:编码,仅文本模式下使用

    其他参数

    read

    #文本模式
    f = open('tttt','r+')
    f.write("magedu")
    f.write("妈个教育")
    f.seek(0)
    print(f.tell())#    0
    print(f.read(7))#   magedu妈
    print(f.tell())#    9
    f.close()
    #二进制
    f = open('tttt','rb+')
    f.write(b"magedu")
    f.read(7)
    print(f.tell())#    13
    f.read(1)
    print(f.tell())#    14
    f.close()

    行读取

    write

    close

    其他

     

     上下文管理

    在Linux中,执行

     

     上下文管理

    另一种写法

     

     

    练习1

     

    #下面是最简单的一种拷贝,但是只是拷贝了原文件的内容!
    with open('test.txt',encoding='utf-8') as f1:
        with open('test2.txt','w',encoding='utf-8') as  f2:
            s = f1.read()
            f2.write(s)

    练习2

     

     

    #初步思想:常规统计方法
    def wordcount2(file='test2.txt'):
        chars='''~!@#$%^&*()_+{}[]|\/"';:=.,<>'''
        charset = set(chars)
    
        with open(file,encoding='utf-8') as f:
            wordcount={}
            for line in f:
                words = line.split()
                # for k,v in zip(words,(1,)*len(words)):同下
                for k,v in map(lambda x:(x,1),words):
                    k = k.strip(chars)
                    if len(k)<1:
                        continue
                    k = k.lower()
                    #处理一些特殊的分隔符,如 c:foo ==> c,foo; 3.5.3 ==> 3,5,3; a///b ==> a,b
                    start = 0
                    for i,value in enumerate(k):#i=1 start=0
                        if value in charset:
                            if start == i:
                                start += 1
                                continue
                            key = k[start:i]
                            wordcount[key] = wordcount.get(k, 0) + 1
                            start = i+1
                    else:
                        key = k[start:]
                        wordcount[key] = wordcount.get(k, 0) + 1
    
        #按照TOP N 排序得到前十的单词
        lst = sorted(wordcount.items(),key=lambda x:x[1],reverse=True)
        for i in range(10):
            print(str(lst[i]))#.strip("'()").replace("'",""))
        return lst
    做一枚奔跑的老少年!
  • 相关阅读:
    html+css第五篇
    客户退出后操作-不能查询之后的数据,可以查询到退出前的历史数据
    html+css第四篇
    让bat文件自动以管理员身份运行
    MS SQLServer相关自动化程序的问题汇总 (SQLServer每天定时输出EXCEL或xml的格式的问题等 )
    统一操作系统 UOS 回应质疑 (独立思考)
    JAVA是否最适合企业应用开发?
    运维常说的 5个9、4个9、3个9 的可靠性,到底是什么鬼?
    百度网盘分享创建自定义密码的方法失效了怎么办(2020年)?
    Win10如何设置休眠选项(关于睡眠、休眠、快速启动这几个伪关机功能如何设置更适合笔记本电脑?)
  • 原文地址:https://www.cnblogs.com/xiaoshayu520ly/p/10671821.html
Copyright © 2020-2023  润新知