读写文件是最常见的IO操作,python内置了读写文件的函数,用法和C是兼容的.
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)
读文件
在python中,使用open()函数,可以打开一个已经存在的文件,或者创建一个新文件
格式为:open(文件路径,访问模式)
#以只读方式的模式打开一个当前路径下的test.txt文件,并将其赋值给变量f
#open()函数默认以只读方式写入,故只读模式"r"可省略不写
f=open("test.txt","r")
#调用read()方法一次性读取文件的全部内容(read方法适用于读取文件内容较少时),python语言将文件内容读到内存中,用字符串的方式表示,并打印到屏幕上
content = f.read() #将程序所得到的返回值存放到变量content中
print(content) #打印其返回值,即就是该文件的内容
#最后一步是调用close()方法关闭文件,文件使用完毕之后必须关闭.
f.close()
读二进制文件
input=open("test.txt","rb")
读取一行内容,使用readline()方法:
f=open("test.txt","r")
f.readline()
结果为:
'this is first line\n'
读取所有行的内容,使用readlines()方法
f=open("test.txt","r")
f.readlines()
f.close()
输出结果为:
['this is first line\n', 'this is second line\n']
f.close()
遍历文件数据
f=open("test.txt","r")
for line in f:
print (line)
f.close()
输出结果为:
this is first line
this is second line
this is third line
那为什么要关闭文件呢?
由于内存的访问速度要远远快于磁盘的访问速度,python分配了一块叫做缓冲区的内存空间,用来临时保存将要写入磁盘的数据.一旦缓冲区满了,或者文件被关闭了,缓冲区里的内容就会被写入磁盘.所以在操作结束后,必须关闭文件,以确保所有的数据在物理层面上传输到磁盘中.
#以只写的模式打开一个当前路径下的test.txt文件,并将其赋值给变量f
#访问模式"w"表示对一个文件进行写入操作,如果该文件已存在则将其覆盖,如果不存在则创建该文件
f=open("test.txt","w")
f.write("hello,world") #使用write()方法将括号中的字符串("hello,world")写入到该文件内
f.close #关闭文件
写二进制文件
output=open("test","wb")
附上访问模式的说明:
访问模式 说明
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
复制文件
将test.txt文件复制到本路径下,文件名叫hello.txt
old_file= open("test.txt","r") #首先打开要复制的文件,并将结果赋值给变量old_file
new_file=open("hello.txt","w") #然后在本路径下创建一个新的文件名叫hello.txt,并将结果赋值于变量new_file
content=old_file.read() #从test.txt文件中读取数据,并将其结果赋值给变量content
new_file.write(content) #将test.txt文件的内容写入到hello.txt文件内
old_file.close() #关闭打开的test.txt文件
new_file.close() #关闭打开的hello.txt文件
复制大文件
old_file= open("test.txt","r") #首先打开要复制的文件,并将结果赋值给变量old_file
new_file=open("hello.txt","w") #然后在本路径下创建一个新的文件名叫hello.txt,并将结果赋值于变量new_file
while True: #多次循环,每次读取固定的长度,避免一次读取太多导致内存爆满
content=old_file.read(1024) #从test.txt文件中读取数据,设置一次读取1024字节的字符,并将其结果赋值给变量content
if len(content)==0:
break
new_file.write(content) #将test.txt文件的内容写入到hello.txt文件内
old_file.close() #关闭打开的test.txt文件
new_file.close() #关闭打开的hello.txt文件
文件相关操作
Python内置的os模块可以调用操作系统提供的接口函数,对文件或目录进行操作(实际上操作系统是不允许应用程序直接访问和操作文件和目录的,读写文件就是请求操作系统打开一个文件对象,通常称为文件描述符。然后,通过操作系统提供的接口从这个文件对象中读取数据,或者把数据写入这个文件对象。)
1,文件重命名
OS模块中的rename()方法可以完成对文件的重命名操作
格式为:rename (原文件名,新文件名)
import os #导入os模块,导入之后才可以使用该模块中的方法
os.rename("test.txt","test2.txt") #将当前路径下的test.txt文件重命名为test2.txt
2,删除文件
os模块中的remove()方法可以完成对文件的删除操作
remove(需要删除的文件名)
import os
os.remove("test.txt") #删除当前路径下的test.txt文件
3,创建/删除文件夹
import os
os.mkdir("test") #使用os模块中的mkdir方法创建文件夹
os.rmdir("test") #使用os模块中的rmdir方法删除文件名
4,获取当前目录的绝对路径
import os
os.getcwd() #使用os模块中的getcwd方法获取当前目录的绝对路径
5,改变文件创建的默认路径
import os
os.chdir("../") #改变创建文件时的默认路径为当前目录的上一层目录
6,列出所制定的目录下的文件,类似于windows下的dir,Linux下的ls,但以列表的形式列出
import os
a = os.listdir("./") #列出当前目录下的文件,将结果赋值给变量a
print(a)
输出结果为:
['.idea', 'demo1.py', 'demo2.py', 'demo3.py', 'hello.txt', 'test.txt']
#在该列表中每一个字符串即就是所指定路径下的文件名