Python读写文件

Python读写文件一、读写文件方式在当前python文件同级目录下存在一个名为file的文件,内容如下1、使用withopen读取文件在上述脚本中可以发现,content作为一个列表,虽然在withopen结构体内,但在withopen结构体外也可以使用,但在方法内部定义的变量,在方法外部一般是不能访问的

大家好,欢迎来到IT知识分享网。

一、读写文件方式

在当前python文件同级目录下存在一个名为file的文件,内容如下

Python读写文件

1、使用with open读取文件

def read_file(filepath):
    with open(filepath) as fp:
        content=fp.read();
    return content
    
    
ret=read_file('file')
print(ret)

Python读写文件

在上述脚本中可以发现,content作为一个列表,虽然在with open结构体内,但在with open结构体外也可以使用,但在方法内部定义的变量,在方法外部一般是不能访问的,这在java中被称为局部变量。

2、不使用with读取文件

def read_file(filepath):
    fp=open(filepath)
    content=fp.readlines()
    fp.close()
    return content

ret=read_file('file')
print(ret)

Python读写文件

通过对两种读取方式的对比发现,第一种方式比较简洁,不用关心流是否关闭,with会在文件不再使用时自动关闭流,并且输出的格式与文件内容中显示的一致。第二种方式就必须要手动显示的关闭流,且输出格式与文件内容不同,需要进行特殊处理,且发生异常之后,可能会导致流未正常关闭。

对第二种方式输出结果做处理,使其与文件内容一致,。readlines方法返回的为一个列表,故需要对类表进行遍历,替换特殊符号

def read_file(filepath):
    str=""
    fp=open(filepath)
    content=fp.readlines()
    for c in content:
        str+=c.replace('\n','\n')
    fp.close()
    return str

ret=read_file('file')
print(ret)

Python读写文件

实际使用中,建议使用第一种方式来读写文件内容,当文件不在当前python文件同级目录时,可使用绝对路径后者相对路径来确定文件的位置

二、文件打开方式

open方法可以传递两个参数,第一个参数为文件路径,第二个参数为打开文件的方式,可选值为r/w/a/r+

r   只读模式打开文件,如果为传递第二个参数,则默认为r

w  写入模式打开文件

a  附加模式打开文件

r+ 读取和写入模式打开文件

1、只读模式(如上述实例),如果文件不存在,则抛出No such file or directory的异常

2、写入模式

 如果写入的文件不存在,则会新建该文件,并且写入内容,如果文件已存在,则会覆盖文件之前内容,所以使用该方式时需要慎重,确定文件中之前内容被覆盖是否影响当前业务逻辑。

def w_file(filepath):
    with open(filepath,'w') as wf:
        wf.write('today is a nice day\n')
        wf.write('do you want to take a trip.')
        

w_file('wfile.txt')

Python读写文件

写入模式只能写入,不能读取,若果在wf.write下面添加如下脚本,则会出现io.UnsupportedOperation: not readable的异常

content=wf.read()
print(content)

Python读写文件

3、附加模式

def a_file(filepath):
    with open(filepath,'a') as af:
        af.write('nice day\n')
        af.write('good start.')
        
a_file('file')

Python读写文件

4、读写模式

def rw_file(filepath):
    with open(filepath,'r+') as rwf:
        rwf.write('This is myfile.\n')
        rwf.write("The end.")
        content=rwf.read()
    return content

content=rw_file('myfile')
print(content)

与读取模式相同,若文件不存在,也将抛出异常

Python读写文件

在当前Python脚本所在同级目录新建文件myfile,重新执行

 Python读写文件

Python读写文件

通过上述控制台输出及文件内容来看,控制台并未输出任何内容,但要写入的信息已经保存到文件中,这说明,在执行read时,信息还未被写入文件。

如果该文件内容已存在,执行上述读写程序,是否能够读取到文件内容,来尝试一下,保留上次myfile中内容,程序中向文件添加一行记录,再次读取之前文件内容

def rw_file(filepath):
    with open(filepath,'r+') as rwf:
        rwf.write("new append")
        content=rwf.read()
    return content

content=rw_file('myfile')
print(content)

Python读写文件

Python读写文件

可以看到,读取的内容与原有文件内容不同,缺少了This is my字符,而文件中新添加的new append刚好填充了缺少的字符所在位置。

上述示例先写入,再读取,出现上述情况也是意料之中,那么如果先读取之前文件,在写入,是否就和预期一样,读取原有文件内容,并且添加新内容?

现在文件myfile内容如下

Python读写文件

def rw_file(filepath):
    with open(filepath,'r+') as rwf:
        content=rwf.read()
        rwf.write('\nappend new line.\n')
        rwf.write("new end.\n")
    return content

content=rw_file('myfile')
print(content)

Python读写文件

Python读写文件

如上所示,答案是肯定的,先读取出了原有内容,在原有内容基础上添加了新内容。所以我们在使用的时候要注意读取和写入的顺序。

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/35143.html

(0)
上一篇 2024-04-10 15:33
下一篇 2024-04-10 20:15

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信