今天开始学习file 的基本操作。
在Python中,不可避免的需要对实际数据文件进行读写等各种操作。
Python 提供了函数和方法对文件基本的操作。可以使用file对象做大部分的文件操作。
对文件进行操作需要按照如下步骤:
1. open 文件,
2. 文件操作(读或写)
3. 关闭文件 这是基本要求。
1、file 打开文件
open()函数
作用:打开文件,创建一个file 对象。
语法:
file object = open(file_name [, access_mode][, buffering])
其中: file_name : 是一个包含了需要访问的文件名的字符串值。
access_mode : 决定了打开文件的模式: 只读、写入、追加
,默认文件访问模式是只读(r)
buffering : if buffering ==0 ,则不会寄存,bufferiing =1 ,文件会寄存行。if buffering>1 的整数,表明了寄存区的缓冲大小。if buffering <0 ,寄存区的缓冲大小为系统默认。
下面给出不同模式打开文件的列表:
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
例如:
import codecs f=codecs.open('1.txt') //打开文件,默认为只读 print (f.read()) f.close()
1111111 2222222 3333333 4444444 5555555
f=codecs.open('1.txt','rb')
file=codecs.open('4.txt','wb')按照各自不同模式进行打开文件。
file 对象的属性:
当文件被打开后,就有了一个file 对象,可以获取file的各种相关信息。
先给出file的属性列表:
属性 | 描述 |
---|---|
file.closed | 返回true如果文件已被关闭,否则返回false。 |
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
file.softspace | 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。 |
例如:
import codecs f=codecs.open('1.txt','rb') print (f.read()) print (f.mode) print (f.name) print (f.softspace) print (f.closed) f.close() print (f.closed)
1111111 22222222 33333333 444444444 rb 1.txt 0 False True True
在上面用到了close() 方法
close () 关闭文件。
当一个文件对象的引用被重新制定给另外一个文件时,Python 会关闭之前的文件。
2. file读文件
1.read() 作用: 从一个打开的文件中读取一个字符串。
方法: file.read(count);
count: 是要从已打开文件中读取的字节计数。
该方法从文件的开头开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。
import codecs f=codecs.open('1.txt','rb') print (f.read()) f.close()
1111111 22222222 33333333 444444444
2. readlines()
作用:用于读取所以行(直到结束符EOF),并返回列表。该列表可由for 语句处理。
读取文件内容,文件内容的每一行都是一个字符串,最后返回一个list
语法:file.readlines()
返回值: 列表,包含所以行
例如:
1.txt 的内容如下:
1111111 2222222 3333333 44444444 555555555 666666666import codecs f=codecs.open('1.txt','rb') print (f.readlines()) f.close()结果:
['1111111\n', '2222222\n', '3333333\n', '44444444\n', '555555555\n', '666666666\n']3. readline()
作用:
用于从文件中读取一行,返回一个字符串。包括“\n”.
如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符
语法:file.readline()
返回值: 返回从字符串中读取的字节
import codecs f=codecs.open('1.txt','rb') print (f.readline()) f.close()1111111import codecs f=codecs.open('1.txt','rb') print (f.readline()) print (f.readline()) print (f.readline()) print (f.readline()) print (f.readline()) f.close()1111111 2222222 3333333 44444444 555555555从上面可以看出: readlines 与readline 的区别,readlines 主要是读取文件内容的所有内容,且,每一行都是一个字符串,最后返回一个list。 而readline是读取文件内容的某一行,返回一个字符串。
3、file 写文件
write()方法可以将任何字符串写入一个打开的文件。该方法不会再字符串的结尾添加换行符(“\n”)
语法: file.write(string)
string : 是要写入到已经打开文件的内容
import codecs f=codecs.open('1.txt','ab') f.write('hello python1\n') f.write('hello %s\n' % 'yansss') f.write('hello {0}\n'.format('ssssss')) f.write('hello python3\n') f.close()另外,1.txt 内容如下:
111111111 22222222 33333333 444444444 55555555f=open('1.txt','wb') f.write('wwww.run\nvery good\n\hello python\n') f.close()在此查看1.txt:
wwww.run very good \hello python2.writelines()
作用: 用于向文件中写入一序列的字符串。这一序列字符串可以是迭代对象产生的,如字符串列表。换行需制定换行符\n
语法:file.writlines(str)
str–要写入的字符串序列
返回值: 无
import codecs f=codecs.open('5.txt','wb') f.writelines(['abdc\n','dddd\n','ddhdh\n']) f.close()结果5.txt 内容如下:
abdc dddd ddhdh以上可以看出,writelines 必须传入一个序列,即列表,write 必须传入的是字符串。
4. file 常用方法
1.flush()用来刷新缓冲区,即将缓冲区的内容立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区
一般,文件关闭后自动刷新缓冲区。
但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法
语法:file.flush()
返回值:无
import codecs f=codecs.open('5.txt','rb') print (f.name) f.flush() f.close()5.txt2.tell ()
作用: 返回文件的当前位置,即文件指正当前位置
语法: file.tell(offset[, where])
返回值:文件位置
文件内容:
abdc dddd ddhdhimport codecs f=codecs.open('5.txt','rb') print (f.name) print (f.readline()) print(f.tell()) f.close()结果:
5.txt abdc 53.next()
作用:读取文件的下一行内容,返回一个字符串。
语法: file.next()
返回值: 返回文件的下一行
1.txt内容如下:
1111111 2222222 3333333 44444444 555555555 666666666import codecs f=codecs.open('1.txt','rb') print (f.name) print (f.readline()) print (f.next()) f.close()结果:
1.txt 1111111 2222222