|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
内容概要: 文件概念;文件打开f=open(‘’,’’);打开文件后就可以获得文件对象f,有了文件对象f就可以利用文件对象方法(f.read();f.readline();f.write();f.writelines();f.seek();f.tell())对文件进行处理;处理完文件之后记得将文件关闭close()。
0. 文件是指由创建者所定义的一组相关信息的集合。可简单划分为文本文件和二进制文件。文件形式上由文件名.扩展名组成;文件的处理过程为:输入 --> 处理 -->输出。
1. 文件的打开open('路径','打开方式'),成功打开一个文件后,会返回一个文件对象。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Character Meaning
--------- ---------------------------------------------------------------
'r' open for reading (default) (默认)打开为只读
'w' open for writing, truncating the file first 如果文件不存在会新建,已存在会覆盖。
'x' create a new file and open it for writing 如果文件不存在则新建,已存在会报错
'a' open for writing, appending to the end of the file if it exists
'b' binary mode
't' text mode (default) (默认)打开为文本类型
'+' open a disk file for updating (reading and writing) 可读写模式,联合其他模式使用
'U' universal newline mode (deprecated) 通用换行符支持
注意路径的写法:(E盘下有个record.txt文件)
’E:\\record.txt’; ’E:/record.txt’; ’E://record.txt’;都可以,但’E:\record.txt’错误。
例如:
- >>> f=open('E:\\record.txt','rt') # ’rt’为默认方式可省略
- >>> f # 返回f为一文件对象
- <_io.TextIOWrapper name='E:\\record.txt' mode='rt' encoding='cp936'>
复制代码
2. 以下几个都是文件对象方法,调用文件对象方法来处理文件
3. f.read(size=-1)
(1)功能:从文件中读取size个字符(注意是字符,不是字节)。参数不指定或负时读取剩余所有字符。
(2)例如:
- >>> f.read(5) # 读取前5个字符,这时文件指针后移至’小’的后面
- '小客服:小'
- >>> f.read(5) # 在上一个指令文件指针位置后又读出了5个字符,文件指针继续后移5个字符。
- '甲鱼,今天'
- >>> f.read() # 参数未设置,读出剩余所有字符
- '有客户问你有没有女朋友?\n小甲鱼:咦??\n小客服:我跟她说你有女朋友了!\n小甲鱼:。。。。。。\n小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"\n小甲鱼:然后呢?\n小客服:她买了两个,说发一个货就好~\n小甲鱼:呃。。。。。。你真牛!小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。\n小客服:滚!!!'
- >>> f.read() #文件指针已经指到文件末尾,所以再读取,只能是空字符了’’.
- ''
复制代码
4. f.tell()
(1)功能: 以字节数的形式返回当前文件指针位置。注意一个中文字符是两个字节。
(2) 例如:重新打开E:/record.txt
- >>> f=open('E:\\record.txt','rt')
- >>> f.read(5)
- '小客服:小'
- >>> f.tell()
- 9 # 之所以返回9是因为一个中文是2个字节,所以目前位置为2+2+2+1+2=9
复制代码
5. f.seek(offset,from)
(1)功能:移动文件指针,从from处移动offset个字节。from:0起始位置;1当前位置;2文件末尾。
(2)例如:
- >>> f.seek(45,0) # 从文件开头移动45个字节。
- 45
- >>> f.readline() # 从45字节处打出一行
- '小甲鱼:咦??\n'
- >>> f.seek(46,0) # 从文件开头移动46个字节
- 46
- >>> f.readline()
- # 从46字节处打出一行为啥就出错了呢?原因字节45和46是中文’小’字。半个汉字无法打印。
- Traceback (most recent call last):
- File "<pyshell#14>", line 1, in <module>
- f.readline()
- UnicodeDecodeError: 'gbk' codec can't decode byte 0xe3 in position 4: illegal multibyte sequence
复制代码
6. 文件列表化,很简单,直接list(f),就可将文件内容放到列表中。
7. 迭代读取文本的每一行方法。
- >>> f.seek(0,0) #定位文件指针至文件开头
- 0
- >>> for each_line in f: # 迭代读取每一行
- print(each_line)
- 小客服:小甲鱼,今天有客户问你有没有女朋友?
- 小甲鱼:咦??
- 小客服:我跟她说你有女朋友了!
- 小甲鱼:。。。。。。
复制代码
8. f.write(str):将字符串写入文件并返回字符数; f.writeliens(seq) : 将字符串序列写入文件。
注意:写文件必须确保打开方式为’w’,’x’,或’a’的方式。
例如:
- >>> f1=open('E:/test.txt','w') # 新建一个test.txt文件
- >>> f1.write('学习Python非常有趣!2017-07-16') # 写入一句话
- 23 #返回字符个数
- >>> f1.close() #一定要关闭,不关闭看不到修改的内容
- >>> list1=[] #定义一个列表用于存放文本序列
- >>> f=open('E:/record.txt') #打开文本文件,只读
- >>> list1=list(f) #将文本内容读入列表
- >>> list1
- ['小客服:小甲鱼,今天有客户问你有没有女朋友?\n', '小甲鱼:咦??\n', '小客服:我跟她说你有女朋友了!\n', '小甲鱼:。。。。。。'小客服:滚!!!']
- >>> f1=open('E:/test.txt','a') #打开文件追加内容
- >>> f1.writelines(list1) #将文本序列写入文件
- >>> f1.close() #一定要关闭,不关闭看不到修改的内容
复制代码
9. f.close(): 虽然python有垃圾回收机制,不关闭文件也不会像C语言中影响那么严重,但是为了避免因断电等意外造成文件未保存情况,还是要养成关闭文件的优雅习惯。
|
评分
-
查看全部评分
|