设为首页 收藏本站
查看: 997|回复: 0

[经验分享] 第九次课:Python文件操作

[复制链接]

尚未签到

发表于 2018-8-8 08:24:14 | 显示全部楼层 |阅读模式
  Python文件操作的方式有多种,这里学习两种,第一种是直接调用内置函数,无需引入模块;第二种就是引入os和shutil模块,这部分内容将在后续课程中介绍。下面就先开始学习第一种:
  1.读写操作
  open(file,op):打开指定文件file,若文件不存在则创建。其中file为文件名,file的路径默认为程序所在的位置,也可指定file的路径。
  参数op:
  (1)“r”或无:默认为“r”即简单打开文件。若省略参数op,文件不存在则会报错,写文件操作也会报错;
  (2)“w”:打开并可写文件。若文件已存在,则以前的内容将被清除;
  (3)“a”:向文件中追加文本。向已存在的文件中追加内容;
  (4)“b”:以二进制方式读取,提高安全性;
  (5)“r+”:以读写模式打开
  (6)“w+”:以读写模式打开 (参见 w )
  (7)“a+”:以读写模式打开 (参见 a )
  (8)“rb”:以二进制读模式打开
  (9)“wb”:以二进制写模式打开 (参见 w )
  (10)“ab”:以二进制追加模式打开 (参见 a )
  (11)“rb+”:以二进制读写模式打开 (参见 r+ )
  (12)“wb+”:以二进制读写模式打开 (参见 w+ )
  (13)“ab+”:以二进制读写模式打开 (参见 a+ )
print '**********读操作**********'  
fone=open('1.txt')             #打开文件并将内容赋值给fone
  
print(fone.read())               #读取文件,将文件内容全部输出
  
# print(fone.readline())      #读取文件的第一行,可以指定范围
  
# print(fone.readlines())    #把内容的每一行作为列表中的一部分,并返回列表
  
print(fone.mode)               #获取当前open()模式
  
fone.close()                         #关闭文件
  

  
如果文件不存在将出现以下错误:
  
IOError: [Errno 2] No such file or directory: '1.txt'
  
正常运行结果:
  
**********读操作**********
  
This is first write example
  
Two line
  
Three line
  
Four line
  
r
  
**********读操作**********
  
This is first write example
  
r
  
**********读操作**********
  
['This is first write example\n', 'Two line\n', 'Three line\n', 'Four line\n']
  
r
  如果在该模式下执行一个写操作,程序是报错的:
fone.write('这是第一个写的操作')  

  
IOError: File not open for writing
为了显示不出现乱码的情况,这里需要引入codecs模块  
import codecs
  
print '**********写操作**********'
  
print '**********覆盖写入**********'
  
ftwo=codecs.open('1.txt','w')
  
print '写入一条内容'
  
ftwo.write('This is first write example\n')
  
print '写入多条内容'
  
ftwo.writelines(['Two line\n','Three line\n','Four line\n'])
  
ftwo.close()
  
print '**********追加写入**********'
  
fthree=codecs.open('1.txt','a')
  
print '写入一条内容'
  
fthree.write('This is append content example')
  
print '写入多条内容'
  
fthree.writelines(['This','is','append','content','example'])
  
fthree.close()
  注:使用open函数进行文件操作时,一定要记得使用close函数进行关闭;此外使用open函数打开并写文件时,就算文件存在,Python也会先删除原有文件然后创建新文件,也即文件的内容也随之删除!
  2.常用操作函数和属性
  (1)read([size]):size为读取的长度,以byte为单位;
  (2)readline([size]):读一行,如果定义了size,有可能返回的只是一行的一部分;
  (3)readlines([size]):把文件每一行作为一个list的一个成员,并返回这个list。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分;
  (4)write(str):把str写到文件中,write()并不会在str后加上一个换行符;
  (5)writelines(seq):把seq的内容全部写到文件中(多行一次性写入),不会在每行后面加上任何东西;
  (6)close():关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。如果一个文件在关闭后还对其进行操作会产生ValueError异常;
  (7)flush():把缓冲区的内容写入硬盘;如打印一行文字print '文件的名称是:%s'%fopen.name,调用该方法将这行内容插入到文本中;
  (8)tell():返回文件操作标记的当前位置,以文件的开头为原点,常用来文件定位;
  (9)next():返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的;
  (10)seek(offset[,whence]):将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾;
  (11)encoding:指定文件的编码格式;
  (12)closed:查看当前文件的状态,关闭返回True,打开返回False;
  (13)name:返回文件的名称;
  (14)mode:返回文件当前的模式;
import codecs  
f1=codecs.open('1.txt','ab+')
  
print '文件名称是:%s'%f1.name
  
f1.flush()
  
f1.seek(40,1)
  
#print f1.next()
  
print f1.tell()
  
print f1.closed
  
print f1.mode
  
f1.close()
  
print f1.closed
  3.with语句
  在Python中有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。
  读取一个文件,如果不用with语句,代码如下:
fopen=codecs.open('file.txt')  
fopen.read()
  
fopen.close()
  代码的这类写法会有两个问题。一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。
  这时候with语句就显现出了它的优势了。除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常。下面是with版本的代码:
print '用with语句打开单个文件'  
with codecs.open('file.txt') as fopen:
  
print(fopen.read())
  
print '用with语句打开多个文件'
  
with codecs.open('1.txt','r',encoding='gbk') as f1,codecs.open('2.txt','r') as f2:
  
print f1.read()
  
print f2.readline()
  如上可以看出,Python的with语句是提供一个有效的机制,让代码更简练,同时在异常产生时,清理工作更简单。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-548423-1-1.html 上篇帖子: Python: SocketServer模块 下篇帖子: Python练习题(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表