美文网首页
python中文件读取中r,r+之间的区别

python中文件读取中r,r+之间的区别

作者: yuanCruise | 来源:发表于2018-11-20 19:42 被阅读49次

    0.注意事项

    1.如果想要把下面介绍的代码跑通,都需要把准备动作部分代码加上。比如你想测试下w,那就在w部分代码前面把准备动作部分(部分1)的代码加上。
    2.本文中用到r的时候请使用read(),读取的时候有三种读取方式,下面简单介绍一下:

    • file.read():每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件大于可用内存,则不可能实现这种处理。而且如果要对文件进行按行读取进行操作的话,就要用下面两个了。
    • file.readline():每次只读取一行,通常比 .readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 .readline()。
    • file.readlines():一次读取整个文件,象 .read() 一样。但是返回的是可迭代对象,所以仍然可以按行操作。

    1.准备动作

    lines = open('head.txt').readlines()
    for line in lines:
        line = line.strip()
        #line中存的head文件中保存的底下的各个txt的名称
        #如1.txt/2.txt
    
        #这一段的作用相当于把所有的修改的东西先定义好
        #并且存在file_lines里面
        #后面用writelines把这整个修改写进文件里面
        with open(line) as file:
            file_lines = file.readlines()
            for i in range(0,len(file_lines)):
                file_lines[i] = "0" +" "+ file_lines[i].strip() + " "+"1"+"\n"
                #print(file_lines[i])
         with xxxx #执行注意事项第一项的时候请把后面的代码加到这个位置。(原理就是请加在for循环里面)
    #--------------前面只是利用w,r,w+,r+处理前的基础准备---------
    

    下图展示的上述代码中用到的txt文件具体实例。


    2 r 和 r+

    #r和r+:
    #r:仅仅表示读入
    #r+:既可以读取还可以写入
    #但r和r+与w,w+不同的是,不会把原先存在txt中的东西清空
    #举例说明
    
    

    with open(line,"r") as file2:
        content_read = file2.read()
        content_readline = file2.readline()
        content_readlines = file2.readlines()
        print('content_read:{},content_readline:{},content_readlines:{}'.format(content_read,content_readline,content_readlines))
    
    

    执行结果如下:
    在用r打开一个文件的时候,每读一次标记会往后移动,所以执行上述代码时结果如下。所以当先用read之后,在当前打开的文件中所有东西都被读完了,所以readline和readlines都读不到东西了。



    如果先用readline的话,会先读掉一行,让后剩余部分被read读走了。

    with open(line,"r") as file2:
        content_readline = file2.readline()
        content_read = file2.read()
        content_readlines = file2.readlines()
        print('content_read:{},content_readline:{},content_readlines:{}'.format(content_read,content_readline,content_readlines))
    
    

    with open(line,"r") as file2:
            file2.writelines(file_lines)
            content_read = file2.read()
            content_readline = file2.readline()
            content_readlines = file2.readlines()
    

    执行结果如下:
    用r的时候不能用写操作,只能够read。

    用r+的时候,首先可以确定的是读入的文件肯定可以进行写操作了,不会再报错了。然而writelines这个语句在read前,还是在后,对最后的结果会有影响。下面先看结果在进行分析。

    • writelines在前面
    with open(line,"r+") as file2:
            file2.writelines(file_lines)
            content_read = file2.read()
            content_readline = file2.readline()
            content_readlines = file2.readlines()
            print('content_read:{},content_readline:{},content_readlines:{}'.format(content_read,content_readline,content_readlines))
    
    

    输出结果:

    content_read:,content_readline:,content_readlines:[]
    content_read:,content_readline:,content_readlines:[]
    

    文件结果:


    • writelines在后面
    with open(line,"r+") as file2:
            content_read = file2.read()
            content_readline = file2.readline()
            content_readlines = file2.readlines()
            file2.writelines(file_lines)
            print('content_read:{},content_readline:{},content_readlines:{}'.format(content_read,content_readline,content_readlines))
    
    

    输出结果:

    content_read:yuanlei
    jym,content_readline:,content_readlines:[]
    content_read:jym
    yuanlei,content_readline:,content_readlines:[]
    

    文件结果:


    上述两种结果分析:
    首先我们可以发现r+肯定是可以读的这一点,而如果用r+打开文件后,先对writelines写在前面的结果进行分析。

    • writelines在前。该种情况属于先用r+打开文件,然后writelines把文件流读进来,首先第一步把原始文件流完全清空,再把file_lines中准备好的写入序列写入到文件中,所以文件展示如上面所示。而read函数输出是空原因就是writelines已经把文件流清空了,而read读取并打印的就是这个文件流,而不是writelines后来写进去的新文件。
    • writelines在后。这种情况也很容易理解,首先先用read读取,所以打印的结果和用r打开并read的情况完全相同。而之后再用writelines的时候,他会先清空这个文件流,但是此时文件流在read函数的这里,不在原始文件中,所以文件流没有被writelines是给清空,因此writelines只是把file_lines中的内容添加在了原始文件的后面。(感觉这个read后面跟着一个write的操作,实现的效果很像用a打开文件的效果)

    with open(line,"r") as file2:
        pass
    #或者
    with open(line,"r+") as file2:
        pass
    

    执行结果如下:
    结果就是啥也没有,因为r和r+在打开文件的时候就会不会把文件清空。


    相关文章

      网友评论

          本文标题:python中文件读取中r,r+之间的区别

          本文链接:https://www.haomeiwen.com/subject/rnktqqtx.html