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

2018-11-20  本文已影响49人  yuanCruise

0.注意事项

1.如果想要把下面介绍的代码跑通,都需要把准备动作部分代码加上。比如你想测试下w,那就在w部分代码前面把准备动作部分(部分1)的代码加上。
2.本文中用到r的时候请使用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前,还是在后,对最后的结果会有影响。下面先看结果在进行分析。

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:[]

文件结果:


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写在前面的结果进行分析。


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

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


上一篇下一篇

猜你喜欢

热点阅读