前言
读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
python中对文件的操作方法经常使用open和with open。下面分别介绍
open()方法
正常情况下,想要打开一个文件并且保证该文件会被关闭。使用open()方法,最后一定要保证关闭文件对象,即调用close()方法。原因是当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘同时释放资源。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。语法格式如下
文件对象f = open(文件名,文件对象访问模式)
其中的文件对象访问模式如下
1. "w",打开一个新的文件并写入内容
这里对象访问模式使用"w",打开文件时,文件存在则清空内容,不存在则创建新的
1
2
3
4
5
|
f = open ( '1.txt' , 'w' ) f.write( '今天一直在下雨 ' ) f.write( '把我整抑郁了 ' ) f.write( 'o(╥﹏╥)o ' ) f.close() |
2. "r",打开文件并读取内容
1
2
3
4
5
6
7
8
9
|
f = open ( "1.txt" , 'r' ) print (f.read()) #读取全部内容 f.close() f = open ( "1.txt" , 'r' ) print (f.readline()) #一个f.readline()只读第一行 f.close() f = open ( "1.txt" , 'r' ) #全部读,但是用列表的方式展示 print (f.readlines()) f.close() |
3. "a",以追加内容的模式打开
上面使用"w"的时候文件存在则会清除内容,如果我们想要打开一个已经存在内容的文件并追加内容则可以使用"a"。如下打开存在的"1.txt"文件,并追加一行内容
1
2
3
|
f = open ( '1.txt' , 'a' ) f.write( "帅哥出来玩吗" ) f.close() |
4. 创建一个空的文件
1
|
open ( "12.txt" , 'w' ).close() |
with open()方法
open()使用后需要调用f.close()方法,但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法。推荐使用with open()
with用于创建一个临时的运行环境,运行环境中的代码执行完后自动安全退出环境。
1. 打开并读取文件,每次读取一行内容
方法一:
1
2
3
4
|
with open ( '1.txt' , 'r' ) as file : for line in file : #依次遍历 #print(line) #默认输出的内容会多一个换行 print (line[: - 1 ]) |
将网页的数据进行保存时有时需要指定编码类型,比如为utf-8。不确定可以查看网页源码的编码类型,这里保存和网页编码类型一样就行
1
|
with open ( './2.html' , 'w' ,encoding = 'utf-8' ) as f: |
方法二:
直接使用循环也可以
1
|
for line in open ( "1.txt" , 'r' ): print (line[: - 1 ]) |
2. 打开并写入文件
1
2
3
|
with open ( '2.txt' , 'a' ) as file : file .write( "hello " ) file .write( "are you ok? " ) |
实用案例
需求:
打开文件1.txt,1.txt的内容为一行行的ip地址。每次从里面读取一行数据加上"http://",然后将其保存到另外一个新的文件中
1
2
3
4
5
|
for ip in open ( "1.txt" , 'r' ): url = "http://" + ip with open ( "url.txt" , 'a' ,,encoding = "utf-8" ) as f: #这里必须以追加的模式打开,不然每次新增内容前都会清空 f.write(url) print ( 'ok' ) |
总结
到此这篇关于Python文件打开读取写入方法的文章就介绍到这了,更多相关Python文件打开读取写入内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/qq_44159028/article/details/120388405