Linux下万物皆文件,所以处处都要遇到对文件的处理操作,win 系统下也一样,更何况python 的跨平台如此强大了:
今天我们来了解python 对文件的操作
1:读文件
要以读文件的模式打开一个文件,使用python 内置函数open(),格式如下
f= open("test.open.txt",'r') ### open函数("文件名","打开文件使用的模式) 如果文件不存在,则报错提示
如果文件打开成功,就可以使用read()方法一次性读取文件内容,所有的内容读到内存,用一个str对象表示,
f.read() ### "hello world"
最后我们调用close()方法关闭文件,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量是有限的
f.close() ### 关闭文件
这样感觉是不是很麻烦,每次都要打开关闭,而且很可能就是会忘记关闭,为了解决这个问题,我们可以使用python 的with 语句来自动帮我们调用close()方法:
with open("test.open.txt",'r') as f: print(f.read())
是不是感觉更简洁了,而且也不用调用close()方法
如果文件特别大,比如几个G或几十G,我们依然用read()方法时,内存肯定”吃”不定,为了预防这种现象发生,我们可以使用read(size)方法,每次只读取size个字节的内容,另外,也可以使用readline()每次只读取一行内容,调用 readlines()一次读取所有内容并按行返回list,
下面我们分别来使用这些方法
1:read()方法,一次读入所有内容
with open("test.open",'r') as f: print(f.read()) ### 输出结果 this is a test txt my name is zhang my age is .....
2:readline()方法,一次读入一行内容,逐行向下读取
with open("test.open",'r') as f: print(f.readline()) print(f.readline()) print(f.readline()) ### 输出结果 this is a test txt my name is zhang
这里我们发现读取行时,出现了空格,是因为python 不会删除行结束符,这个操作只能程序员自己解决:
我们可以strip()方法
with open("test.open","r") as f: print(f.readline().strip()) print(f.readline().strip()) print(f.readline().strip()) ### 输出结果 my name is .... my job is .... my age is ....
3:readlines()方法,读入所有内容,返回列表形式
with open("test.open",'r') as f: print(f.readlines()) ### 输出结果 ['\n', 'this is a test txt\n', 'my name is zhang\n', 'my age is .....\n']
二:写文件
对文件进行写操作使用python 的write()方法
首先打开文件时需要使用”w” 写模式
with open("test.open",'w') as f: f.write("my name is ....\n") f.write("my job is ....\n") f.close() with open("test.open",'r') as f: print(f.read()) ### 输出结果 my name is .... my job is ....
我们发现,原先我们里面的内容没有了,这是因为w是以写模式创建一个文件,而不是打开,也就是覆盖了原来的文件,内容也被清空。那么我可以使用追加的方法
三:追加
with open("test.open",'a') as f: f.write("my age is ....\n") f.close() with open("test.open","r") as f: print(f.read()) ### 输出结果 my name is .... my job is .... my age is ....
a 模式代表追加,如果这个文件不存在,a模式会自动创建文件,并写入。
四:其他
模式,除了读,写,追加以外,python 还提供了很多模式:
五:文件的其他方法
1:| detach(...) :待大神解救
2:| fileno(...) :返回文件的描述符
3: | flush(...) : 把缓冲区的数据刷到硬盘,而不是被动的等待输出缓冲区被写入
4:| isatty(...) :布尔内建函数,当文件是一个类try设备时返回 True,否则返回False:
5: | readable(...)待大神解救
6:| seek(...) :可以在文件中移动文件指针到不同的位置
7: | seekable(...)待大神解救
8:| tell(...) : 显示当前的位置
9: | truncate(...) :将文件截取到当前文件指针位置或者到给写size,以字节为单位
10:| writable(...)待大神解救