文件操作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了文件操作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3422字,纯文字阅读大概需要5分钟。
内容图文
![文件操作](/upload/InfoBanner/zyjiaocheng/1245/f39758f796e04c638d3010c11af0db23.jpg)
在电脑上打开文件的操作:
1.打开文件
2.读取,修改等操作文件
3.关闭文件
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
打开文件的语法:
open(file, mode=‘r‘, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file为文件相对路径或名称,mode为读取操作的模式(见下文),encoding是对字符编码的操作设置。
在window上环境下打开文档,使用的操作系统的默认字符编码,windows操作系统的默认字符编码是GBK,因此需要对在open()的时候指定encoding=‘utf-8‘。
1 data=open(‘yesterday‘,encoding=‘utf-8‘).read() 2print(data) 3#一次性输出文件的所有内容
想要在打开文件后对文件进行更多的操作,需要将打开的文件内存对象赋一个变量。然后,再通过找到该文件对象,对文件进行操作。
一般情况下,文件名的对象取名为‘f‘.
1 f = open(‘yesterday‘,encoding=‘utf-8‘) #文件句柄——就是这个文件的内存对象。文件句柄内包含该文件的文件名,字符集,大小,在内存上的起始位。2 data =f.read() 3 data2=f.read() 4print(data) 5print(‘DATA2‘.center(50,‘-‘),data2)
返回的是第一遍的文件输出,以及格式化的”DATA2“。
print(‘DATA2‘.center(50,‘-‘),data2) 并未重新返回文件内容。
原因在于:文件中有文件指针(相当于文档中的光标,它是按字符位向后移动)
文件最初打开开始,从第一行开始读取文件内容,读完以后,不会重头开始,文件的读取指针还是停留在末尾。
如果需要重新阅读该文件,将文件指针移回相应的位置即可(如头)。
打开文件,想要对文件进行各种操作,需要指定打开文件的模式,即设置mode.
下面介绍所有的模式:
打开文件的模式有:
- r,只读模式(默认)。 __read
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】——注意:不要随便使用该模式,如果不熟悉,请使用备份文件!!!!___write
- a,追加模式。【不可读; 不存在则创建;存在则只追加内容;】___append
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
关于打开的读取方式:
f.read()是将所有的行都读到内存中去,f.readline()是一行一行的读取。
1 #打印前5行 2 f=open(‘lyrics.txt‘,‘r‘,encoding=‘utf-8‘) 3‘‘‘方法1: 4print(f.readline()) 5print(f.readline()) 6print(f.readline()) 7print(f.readline()) 8print(f.readline()) 9‘‘‘ 1011#方法2: 12for i in range(5): 13 print(f.readline())
而f.readlines()返回的是一个包含所有行的列表:
1 f=open(‘lyrics.txt‘,‘r‘,encoding=‘utf-8‘) 2print(f.readlines()) 3 [out]:[‘Somehow, it seems the love I knew was always the most destructive kind\n‘, ‘不知为何,我经历的爱情总是最具毁灭性的的那种\n‘, ‘Yesterday when I was young\n‘, ‘昨日当我年少轻狂\n‘, ... ‘The time has come for me to pay for yesterday\n‘, ‘终于到了付出代价的时间 为了昨日\n‘, ‘When I was young\n‘, ‘当我年少轻狂‘]
由于f.readlines()是先把所有的行加载到内存中,存入到对象中作为一个列表再进行操作。由于从硬盘读取速度远远低于内存读取速度,因此,f.readlines()仅支持小文件操作。
适合大文件操作的读取方式,是一行一行地读取到内存中,操作(动作)完成后就在内存中删除该行,保持内存中永远不会堆积文件。
1 count=0 #计数器2for line in f: #最佳读取方式,打印只保存一行。f是迭代器3if count==9: 4print(‘我是分割线‘.center(100,‘-‘)) 5 count += 1 6continue7print(line) 8 count+=1
文件光标 f.tell():
1 f=open(‘lyrics.txt‘,‘r‘,encoding=‘utf-8‘) 2print(f.tell()) #打印光标所处位置 3print(f.readline().strip()) 4print(f.tell()) #打印当前光标所处位置,上面读取了一行的,故光标固定在了第一行的末尾,即“kind\n”之后。 5 f.close()
返回:
如果只想读取5个字符数,则:
1 f=open(‘lyrics.txt‘,‘r‘,encoding=‘utf-8‘) 2print(f.tell()) 3print(f.read(5)) 4print(f.tell()) 5 f.close()
返回:
f.seek()是重新指定光标位置的函数:
1 f=open(‘lyrics.txt‘,‘r‘,encoding=‘utf-8‘) 2print(f.tell()) 3print(f.readline()) 4print(f.readline()) 5print(f.tell()) 6 f.seek(0) #重新定位光标到位置07print(f.readline()) 8print(f.tell()) 9 f.close()
返回:
f.encoding() 打印文件的编码
1 f=open(‘lyrics.txt‘,‘r‘,encoding=‘utf-8‘) 2print(f.encoding) 3 f.close()
返回:
f.fileno() 返回整数的底层实现使用请求从操作系统的I / O操作的文件描述符。
1 f=open(‘lyrics.txt‘,‘r‘,encoding=‘utf-8‘) 2print(f.fileno()) #返回整数的底层实现使用请求从操作系统的I / O操作的文件描述符。3##操作系统会有专门的接口去调度所有文件,返回的是在内存中的编号。4 f.close()
返回:
f.isatty() 判断读取的文件是否为tty(终端设备)
打印机,linux下的terminal等都属于终端设备。
1 f=open(‘lyrics.txt‘,‘r‘,encoding=‘utf-8‘) 2print(f.isatty()) #判断读取的该文件是否为tty(终端设备)3 f.close()
在tty文件上无法移动光标,f.seekable()用来判断文件是否可以进行光标的定位。
f.readable() 判断文件是否可读;
f.writable() 判断文件是否可写。
f.flush() 强制刷新
文件读写有一个缓存的机制,一般情况下是内存中的数据大小达到限定的大小,会写入硬盘中;如果操作没有成功从内存中写入到硬盘中,可以使用f.flush()进行强制刷新。
f.buffer 是内存中的一个临时文件,
原文:http://www.cnblogs.com/zoe233/p/7049256.html
内容总结
以上是互联网集市为您收集整理的文件操作全部内容,希望文章能够帮你解决文件操作所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。