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

[经验分享] python文件操作二

[复制链接]

尚未签到

发表于 2018-8-5 12:09:09 | 显示全部楼层 |阅读模式
  1、常用函数:


  • fileObject.read([size])  size为读取的长度,以byte为单位。如果不指定参数,表示一次性读取全部
      内容,以字符串形式返回,并且每一行结尾会有一个"\n"符号。
      代码示例1:
      

    with open("text.txt","r") as pf:  
    content = pf.read()
      
    print content

  结果:
  abcede
  123
  this is a test文件操作jfedcba
  代码示例2:
  

with open("text.txt","r") as pf:  content = pf.read(2)
  print content
  

  结果:
  读取:ab


  • fileObject.readline( [size] )  一行,如果给定了size,有可能返回的只是一行的一部分,以字符串的形式返
      回,并且结尾会有一个换行符"\n"。读完一行,文件操作标记移动到下一行的
      开头
      列题1

  

with open("text.txt","r") as pf:  content = pf.readline()
  print content
  

  

  结果:
  大学之道,在明明德,在亲民,在止于至善。
  列题 1:
  

with open("text.txt","r") as pf:  content = pf.readline(15)
  print content
  

  

  结果:
  大学之道,


  • fileObject.readlines( [size] )  把文件每一行作为一个list的一个成员,是一个字符串,并且结尾会一个换行符"\n",并返回这个list。这个函数的内部是通过循环调用readline()来实现的。如果指定了size参数,表示读取文件指定内容的长度,此时就有可能只能读取文件的一部分

  

  
with open("text.txt","r") as pf:
  content = pf.readlines()
  print content
  for line in content:
  print line
  

  结果:
DSC0000.jpg



  • fileObject.write( str )  把str写到文件中,默认是不加换行符的,所以如果想换行的话,得手动加入换行符'

  

with open("test.txt","w") as pf:  pf.write("我是最帮的!!\n学习文件写入操作")
  

  结果:
  我是最帮的!!
  学习文件写入操作


  • fileObject.writelines( seq )  把seq(序列)的内容全部写到文件中(多行一次性写入)。也不会自动加入换行符
      如:

  

content = "我是最帮的!!\n学习文件写入操作,加油!!!"  
with open("test.txt","a") as pf:
  pf.writelines(content)
  

  

  结果:
  我是最帮的!!
  学习文件写入操作我是最帮的!!
  学习文件写入操作,加油!!!


  • fileObject.close()  File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。如果文件关闭后,还对文件进行操作就会产生ValueError错误,但如果不及时关闭文件,有可能产生句
      柄泄露,丢失数据
      #打开文件准备写文件

  

fp = open( "c:\\test.txt",'w')  
print u"文件名:", fp.name
  
#关闭文件
  
fp.close()
  
print u"文件是否关闭:", fp.closed
  

  结果:
  文件名: test.txt
  文件是否关闭: True


  •   fileObject.flush()
      该函数是将缓冲区中的内容写入硬盘

  • fileObject.tell()  返回文件操作标记的当前位置,以文件的开头为基准点

  

with open("test.txt","r") as pf:  print u"当前文件操作标记位置为:", pf.tell()
  line = pf.readline()
  print u"读取一行后文件操作标记位置为:", pf.tell()
  

  结果:
  当前文件操作标记位置为: 0
  读取一行后文件操作标记位置为: 23


  • fileObject.seek( offset[, from ] )  tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后。seek(offset [,from])这是一个文件定位函数,该方法改变当前文件的位置。 Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。如果from被设为0(默认值),这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将为参考位置。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。测试文件test.txt,内容如下:

  

with open("test.txt","r") as fp:  str = fp.read(18)
  print u"读取的字符串是 : ", str
  # 查找当前位置
  position = fp.tell()
  print u"当前文件位置 : ", position
  # 把指针再次重新定位到文件开头
  position = fp.seek(0, 0)
  str = fp.read(18)
  print u"重新读取字符串 : ", str
  

  

  结果:
  读取的字符串是 :  我是最帮的!
  当前文件位置 :  18
  重新读取字符串 :  我是最帮的!
  fileObject.truncate( [size] )
  把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
  

with open("test.txt","r") as fp:  print "Name of the file: ", fp.name
  line = fp.readline()
  print "Read Line: %s" % (line)
  print fp.tell()
  # Try to read file now
  remainingLine = fp.readline()
  print "Read Line: %s" % (remainingLine)
  

  


  • linecache  模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单
      个文件读取多行。

  • linecache.getlines(filename)  从名为 filename 的文件中得到全部内容,输出为列表格式,以文件每行为列表中的一个元素,
      并以 linenum-1 为元素在列表中的位置存储

  • linecache.getline(filename,lineno)  从名为 filename 的文件中得到第 lineno 行。这个函数从不会抛出一个异常–产生错误时它将
      返回”(换行符将包含在找到的行里)。
      如果文件没有找到,这个函数将会在 sys.path 搜索。

  • linecache.clearcache()  清除缓存,如果你不再需要先前从 getline() 中得到的行

  • linecache.checkcache(filename)  检查缓存的有效性。如果在缓存中的文件在硬盘上发生了变化,并且你需要更新版本,使用
      这个函数,执行此函数会讲淘汰的内容删除。如果省略 filename,将检查缓存里的所有条目。

  • linecache.updatecache(filename)  更新文件名为 filename 的缓存。如果 filename 文件更新了,使用这个函数可以更新

  •   linecache.getlines(filename)
      返回的列表。如果出错,则返回空列表。

    • 删除空行的方法

  

    fp = open(r'test.txt')  aList = []
  for item in fp:
  if item.strip():
  aList.append(item)
  fp.close()
  fp = open(r'test2.txt', 'w')
  fp.writelines(aList)
  

  

def delblankline(infile, outfile):  """ Delete blanklines of infile """
  infp = open(infile, "r")
  outfp = open(outfile, "w")
  lines = infp.readlines()
  for li in lines:
  if li=='\n': #不同操作系统下可能会有不同
  print u'空行'
  if li.split():
  outfp.write(li)
  infp.close()
  outfp.close()
  

  
if __name__ == "__main__":
  
delblankline("c:\\1.txt","c:\\2.txt")
  

  

  列题:
  数据文件:data.log
  20160215 000148|0|collect info job start|success|
  20160215000153|0|collect info job
  end|success|resultcode = 0000
  20160216000120|0|collect info job start|success|
  20160216000121|0|collect info job
  end|success|resultcode = 0000
  20160217000139|0|collect info job start|success|
  20160217000143|0|collect info job
  end|success|resultcode = 0000
  数据分析需求:
  每行内容需要生成以每行
  首年月日为名称的文件,
  文件内容写入|0|后的所有
  行内容(也包括|0| )
  算法分析:
  遍历每一行,每行取头8个字母
  新建文件,文件名为首8个字母,然后把第15字符后的所有字
  符拷贝到文件中
  关闭文件
  

fp =open("e:\\data.log")  
for line in fp.readlines():
  filename = line[:14]
  content = line[14:]
  

  with open("e:\\"+filename+".txt","w") as fp2:
  fp2.write(content+"\n")
  

  
fp.close()
  

运维网声明 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-546986-1-1.html 上篇帖子: python 学习笔记第二章:安装python 下篇帖子: Python_类的属性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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