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

[经验分享] [PYTHON] 核心编程笔记之九-Python文件和输入输出

[复制链接]

尚未签到

发表于 2018-8-4 09:57:03 | 显示全部楼层 |阅读模式
  9.2 文件内建函数[open()和file()]
  内建函数open()[以及file()]提供了初始化输入/输出(I/0)操作的通用接口,open()内建函数成功打开文件后会返回一个文件对象,否则引发一个错误,当操作失败,Python会产生一个IOError异常
  file_object = open(file_name,access_mode='r',buffering=-1)
  file_name是打开文件名字的字符串
  access_mode代表文件打开的模式, r代表读取,w代表写入,a代表追加,U代表通用换行符支持
  例:
  fp = open("/etc/motd") #以读方式打开
  fp = open('test','w') # 以写方式打开
  fp = open('data','r+') #以读写方式打开
  fp = open(r'c:\io.sys','rb') # 以二进制读模式打开
  9.2.1 工厂函数file()
  例如: dict(),bool(),file()等等
  9.2.2 通用换行符支持(UNS)
  9.3 文件内建方法
  9.3.1 输入
  read()方法用来直接读取字节到字符串中,最多读取给定数目个字节
  readline()方法读取打开文件的一行,然后整行,包括字符结束行,作为字符串返回
  readlines()方法会读取所有剩余行然后把他们作为一个字符串列表返回.
  9.3.2 输出
  write()内建方法功能与read()和readline()相反,它把含有文本数据或二进制数据块的字符串写入到文件中
  9.3.3 文件内移动
  seek()方法可以在文件中移动文件指针到不同位置,offset字节代表相对于某个位置偏移量,位置的默认值为0, 1代表从当前位置算起,2代表从文件末尾算起
  text()方法是对seek()的补充:它告诉你当前文件指针在文件中的位置
  9.3.4 文件迭代
  for eachLine in f.readline():
  9.3.5 其它
  close()通过关闭文件来结束对它的访问
  调用flush()方法会直接把内部缓冲区的数据立刻写入文件,而不是被动等待
  isatty(),当文件是一个类tty设备时返回True,否则false
  9.3.6 文件方法杂项:
  filename = raw_input('Enter file name: ')
  f = open(filename, 'r')
  allLines = f.readlines()
  f.close()
  for eachLine in allLines:
  print eachLine,
  使用文件迭代器,每次只读取和显示一行:
  filename = raw_input('Enter file name: ')
  f = open(filename, 'r')
  for eachLIne in f:
  print eachLine,
  f.close()
  注:行分隔符和其他文件系统的差异
  POSIX(Unix系列或Mac OS X)系统上,行分隔符是 换行符 NEWLINE(\n)字符
  旧的MacOS下是RETURN(\r)
  DOS和WIN32系统下结合使用 \r\n
  有助于跨平台开发的os模块属性
  os模块属性描述
  linesep用来在文件中分隔行的字符串
  sep用来分隔文件路径名的字符串
  pathsep用来分隔文件路径的字符串
  curdir当前工作目录的字符串名称
  pardir父目录字符串名称
  只要导入os模块,这些变量会设定成自动的值
  ---------------------------------------
  #!/usr/bin/env python
  import os
  filename = raw_input('Enter file name: ')
  fobj = open(filename,'w')
  while True:
  aLine = raw_input("Enter a line ('.' to quit): ")
  if aLine != ".":
  fobj.write('%s%s' %(aLine, os.linesep))
  else:
  break
  fobj.close()
  ----------------------------------------
  以可读可写模式创建一个新文件,使用seek()方法在文件内部移动,使用tell()方法展示我们移动的过程
  >>> f = open('/tmp/x','w+')
  >>> f.tell()
  0L
  >>> f.write('test line 1\n') # 加入一个长度为12的字符串[0-11]
  >>> f.tell()
  12L
  >>> f.write('test line 2\n') # 加入一个长度为12的字符串[12-23]
  >>> f.tell()
  24L
  >>> f.seek(-12,1) # 向后移12个字节
  >>> f.tell()# 到了第二个的开头
  12L
  >>> f.readline()
  'test line 2\n'
  >>> f.seek(0,0)  # 回到最开始
  >>> f.readline()
  'test line 1\n'
  >>> f.tell()    # 又回到了第二行
  12L
  >>> f.readline()
  'test line 2\n'
  >>> f.tell()    # 又到了结尾
  24L
  >>> f.close()   # 关闭文件
  文件对象的内建方法列表
  文件对象的方法操作
  file.close()关闭文件
  file.fileno()返回文件的描述符
  file.flush()刷新文件的内部缓冲区
  file.isatty()贩毒案file是否是一个类tty设备
  file.next()返回文件的下一行
  file.read(size=-1)从文件读取size个字节,当未给定size或给定负值的时候,读取所有字节,作为字符串返回
  file.readinto(buf,size)从文件读取size个字节到buf缓冲区(已不支持)
  file.readline(size=-1)从文件中读取并返回一行(包括行结束符),或返回最大size个字符
  file.readlines(sizeint=0)读取文件的所有行并作为一个列表返回(包含所有行的结束符)
  file.xreadlines()用于迭代,可以替换readlines()的一个更高效方法
  file.seek(off,whence=0)在文件中移动文件指针,从whence(0代表文件起始,1代表当前位置,2代表文件末尾)偏移off字节
  file.tell()返回当前在文件中的位置
  file.truncate(size=file.tell()) 截取文件到最大size字节,默认为当前文件位置
  file.write(str)向文件写入字符串
  file.writelines(seq)向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象
  9.4 文件内建属性
  文件对象的属性描述
  file.closedTrue表示文件已经被关闭,否则为False
  file.encoding文件所使用的编码
  file.mode文件打开时使用的访问模式
  file.name文件名
  file.newlines未读取到行分隔符时为None
  file.softspace为0表示在输出一数据后,要加上一个空格符,1表示不加
  9.5 标准文件
  只要你的程序一执行,那么你就可以访问三个标准文件,标准输入stdin,标准输出stdout,和标准错误stderr.
  Python中可以通过sys模块来访问这些文件的句柄
  print语句通常输出到sys.stdout
  raw_input()通常从sys.stdin接受输入
  sys.* 是文件,所以你必须自己处理好换行符
  9.6 命令行参数
  sys模块通过sys.argv属性提供对命令行参数的访问
  总结如下:
  sys.argv是命令行参数的列表
  len(sys.argv)是命令行参数的个数(也就是argc)
  例:
  -------------------------
  #!/usr/bin/env python
  import sys
  print 'you entered', len(sys.argv),'arguments..'
  print 'they ware:', str(sys.argv)
  -------------------------
  # ./argv.py 76 tales 85 hawk
  you entered 5 arguments..
  they ware: ['./argv.py', '76', 'tales', '85', 'hawk']
  9.7 文件系统
  os模块的文件/目录访问函数
  函数描述
  文件处理
  mkfifo()/mknod()创建命名管道/创建文件系统节点
  remove()/unlink()Delete file 删除文件
  rename()/renames()重命名文件
  stat()返回文件信息
  symlink()创建符号链接
  utime()更新时间戳
  tmpfile()创建并打开(w+b)一个新的临时文件
  walk()生成一个目录树下的所有文件名
  目录/文件夹
  chdir()/fchdir()改变当前工作目录/通过一个文件描述符改变当前工作目录
  chroot()改变当前进程的根目录
  listdir()列出指定目录的文件
  getcwd()/getcwdu()返回当前工作目录/功能相同,但返回一个Unicode对象
  mkdir()/makedirs()创建目录/创建多层目录
  rmdir()/removedirs()删除目录/删除多层目录
  os.pardir返回当前目录的父目录
  文件描述符操作
  open()底层操作系统open(对于文件,使用标准的内建open()函数)
  read()/write()根据文件描述符读取/写入数据
  dup/dup2()复制文件描述符号/功能相同,但是是复制到另一个文件描述符
  设备号
  makedev()从major和minor设备号创建一个原始设备号
  major()/minor()从原始设备号获得major/mino设备号
  os.path模块中的路径名访问函数
  函数描述
  分隔
  basename()去掉目录路径,返回文件名
  dirname()去掉文件名,返回目录路径
  join()将分隔的各部分组成很成一个路径名
  split()返回(dirname(),basename())元组
  splitdrive()返回(drivename(),pathname)元组
  splitext()返回(filename,extension)元组
  信息
  getatime()返回最近访问时间
  getctime()返回文件创建时间
  getmtime()返回最近文件修改时间
  getsize()返回文件大小(以字节为单位)
  查询
  exists()指定路径(文件或目录)是否存在
  isabs()指定路径是否为绝对路径
  isdir()指定路径是否存在且为一个目录
  isfile()指定路径是否存在且为一个文件
  islink()指定路径是否存在且为一个符号链接
  ismount()指定路径是否存在且为一个挂载点
  samefile()两个路径名是否指向同个文件
  例: os和os.path模块例子
  ---------------------------------------
  #!/usr/bin/env python
  import os
  notmp = 0
  for tmpdir in('/tmp',r'c:\temp'):
  if os.path.isdir(tmpdir):
  print '%s is a directory' %tmpdir
  break
  else:
  notmp += 1
  if notmp != 0:
  print 'no temp directory available'
  if tmpdir:
  os.chdir(tmpdir)
  cwd = os.getcwd()
  print '*** current temporary directory'
  print cwd
  print '*** creating example directory...'
  if not os.path.exists('example'):
  os.mkdir('example')
  os.chdir('example')
  cwd = os.getcwd()
  print '*** new working directory: '
  print cwd
  print '*** original directory listing: '
  print os.listdir(cwd)
  print '*** creating test file...'
  fobj = open('test','w')
  fobj.write('foo\n')
  fobj.write('bar\n')
  fobj = open('test')
  for line in fobj:
  print line,
  fobj.close()
  print '*** updated directory listing: '
  print os.listdir(cwd)
  print "*** renaming 'test' to 'filetest.txt'"
  os.rename('test','filetest.txt')
  print '*** updated directory listing: '
  print os.listdir(cwd)
  path = os.path.join(cwd,os.listdir(cwd)[0])
  print '*** full file pathname'
  print path
  print '*** (pathname,basename) =='
  print os.path.split(path)
  print '*** displaying file contents: '
  fobj = open(path)
  for eachLine in fobj:
  print eachLine,
  fobj.close()
  print '*** deleting test file'
  os.remove(path)
  print '*** updated directory listing: '
  print os.listdir(cwd)
  # means cd ..
  os.chdir(os.pardir)
  print '*** deleting test directory'
  os.rmdir('example')
  print '*** DONE'
  ------------------------------
  # python test28.py
  ----------------------------------
  /tmp is a directory
  *** current temporary directory
  /tmp
  *** creating example directory...
  *** new working directory:
  /tmp/example
  *** original directory listing:
  []
  *** creating test file...
  foo
  bar
  *** updated directory listing:
  ['test']
  *** renaming 'test' to 'filetest.txt'
  *** updated directory listing:
  ['filetest.txt']
  *** full file pathname
  /tmp/example/filetest.txt
  *** (pathname,basename) ==
  ('/tmp/example', 'filetest.txt')
  *** displaying file contents:
  foo
  bar
  *** deleting test file
  *** updated directory listing:
  []
  *** deleting test directory
  *** DONE
  ------------------------------------
  核心模块: os和os.path
  9.8 文件执行
  9.9 永久存储模块
  9.9.1 pickle和marshal模块
  9.9.2 DBM风格的模块
  9.9.3 shelve模块
  9.10 相关模块
  文件相关模块
  模块内容
  base64提供二进制字符串和文本字符串的编码/解码操作
  binascii提供二进制和ASCII编码的二进制字符串间的编码/解码操作
  bz2访问BZ2格式的压缩文件
  csv访问csv文件
  filecmp用于比较目录和文件
  fileinput提供多个文本文件的行迭代器
  getopt/optparse提供命令行参数的解析/处理
  glob/fnmatch提供Unix样式的通配符匹配功能
  gzip/glib读写GNU zip(gzip)文件(压缩需要zlib模块)
  shutil提供高级文件访问功能
  c/String10对字符串对象提供类文件接口
  tarfile读写TAR归档文件,支持压缩文件
  tempfile创建一个临时文件(名)
  uu格式的编码和解码
  zipfile用于读取ZIP归档文件的工作
  fileinput模块遍历一组输入文件,每次读取它们内容的一行
  glob和fnmatch模块提供老师Unix shell样式文件名的模式匹配,例如使用*通配符代表任意字符串,用问好(?)匹配任意单个字符
  核心提示:使用os.path.expanduser()的波浪号(~)进行扩展
  Unix:
  >>> import os
  >>> os.path.expanduser('~/example')
  '/root/example'
  WIN32:
  >>> import os
  >>> os.path.expanduser('~/example')
  'C:\\Documents and Settings\\example'

运维网声明 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-546308-1-1.html 上篇帖子: python 执行外部命令 下篇帖子: CentOS7安装python3.6保留python2.7-12198058
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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