第九章 文件的输入和输出

  • 核心笔记:保留行分隔符

  当使用输入方法如 read() 或者 readlines() 从文件中读取行时, Python 并不会删除行结束符. 这个操作被留给了程序员. 例如这样的代码在 Python 程序中很常见:

f = open('myFile', 'r')

data = [line.strip() for line in f.readlines()]

f.close()

  类似地, 输出方法 write() 或 writelines() 也不会自动加入行结束符. 你应该在向文件写入数据前自己完成

  • 核心笔记: 行分隔符和其它文件系统的差异

  操作系统间的差异之一是它们所支持的行分隔符不同. 在 POSIX (Unix 系列或 Mac OS X)系统上, 行分隔符是 换行符 NEWLINE ( \n ) 字符. 在旧的 MacOS 下是 RETURN ( \r ) , 而 DOS 和Wind32 系统下结合使用了两者 ( \r\n ). 检查一下你所使用的操作系统用什么行分隔符。
  另个不同是路径分隔符(POSIX 使用 "/", DOS 和 Windows 使用 "\", 旧版本的 MacOS 使用":"), 它用来分隔文件路径名, 标记当前目录和父目录.
  当我们创建要跨这三个平台的应用的时候, 这些差异会让我们感觉非常麻烦(而且支持的平台越多越麻烦)。幸运的是 Python 的 os 模块设计者已经帮我们想到了这些问题. os 模块有五个很有用的属性. 它们被列在了下表中.
 有助于跨平台开发的 os 模块属性
os 模块属性         描述
linesep           用于在文件中分隔行的字符串
sep            用来分隔文件路径名的字符串
pathsep         用于分隔文件路径的字符串
curdir          当前工作目录的字符串名称
pardir          (当前工作目录的)父目录字符串名称
  不管你使用的是什么平台, 只要你导入了 os 模块, 这些变量自动会被设置为正确的值, 减少了你的麻烦.

  • *****************

  print 语句默认在输出内容末尾后加一个换行符, 而在语句后加一个逗号就可以避免这个行为. readline() 和 readlines() 函数不对行里的空白字符做任何处理, 所以你有必要加上逗号. 如果你省略逗号, 那么显示出的文本每行后会有两个换行符, 其中一个是输入是附带的, 另个是 print 语句自动添加的.

  •  文件对象的内建方法列表

文件对象的方法          操作
file.close()           关闭文件
file.fileno()            返回文件的描述符(file descriptor ,FD, 整数值)
file.flush()             刷新文件的内部缓冲区
file.isatty()            判断 file 是否是一个类 tty 设备
file.nexta()            返回文件的下一行(类似于file.readline() ), 或在没有其它行时引发 StopIteration 异常
file.read(size=-1)        从文件读取 size 个字节, 当未给定 size 或给定负值的时候, 读取剩余的所有字节, 然后作为字符串返回
file.readintob(buf, size)     从文件读取 size 个字节到 buf 缓冲器(已不支持)
file.readline(size=-1)       从文件中读取并返回一行(包括行结束符), 或返回最大 size个字符
file.readlines(sizhint=0)     读取文件的所有行并作为一个列表返回(包含所有的行结束符); 如果给定 sizhint 且大于 0 , 那么将返回总和大约为
sizhint             字节的行(大小由缓冲器容量的下一个值决定)( 比如说缓冲器的大小只能为4K 的倍数,如果sizhint 为15k,则最后返回的可能是16k)
file.xreadlinesc()         用于迭代, 可以替换 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 应该是一个返回字符串的可迭代对象; 在 2.2 前, 它只是字符串的列表

  • OS   ****************

   os 模块实际上只是真正加载的模块的前端, 而真正的那个"模块"明显要依赖与具体的操作系统. 这个"真正"的模块可能是以下几种之一: posix (适用于 Unix 操作系统), nt (Win32),mac(旧版本的 MacOS), dos (DOS), os2 (OS/2), 等. 你不需要直接导入这些模块. 只要导入 os 模块, Python 会为你选择正确的模块, 你不需要考虑底层的工作. 根据你系统支持的特性, 你可能无法访问到一些在其它系统上可用的属性.
  除了对进程和进程运行环境进行管理外, os 模块还负责处理大部分的文件系统操作, 应用程序开发人员可能要经常用到这些. 这些功能包括删除/重命名文件, 遍历目录树, 以及管理文件访问权限等. 下表列出 os 模块提供的一些常见文件或目录操作函数.
  另一个模块 os.path 可以完成一些针对路径名的操作. 它提供的函数可以完成管理和操作文件路径名中的各个部分, 获取文件或子目录信息, 文件路径查询等操作. 下表列出了 os.path中的几个比较常用的函数.

  这两个模块提供了与平台和操作系统无关的统一的文件系统访问方法.

os 模块的文件/目录访问函数
函数                 描述
文件处理
mkfifo()/mknod()           创建命名管道/创建文件系统节点
remove()/unlink() Delete file     删除文件
rename()/renames()         重命名文件
*statc()               返回文件信息
symlink()               创建符号链接
utime()                 更新时间戳
tmpfile()               创建并打开('w+b')一个新的临时文件
walk()                 生成一个目录树下的所有文件名目录/文件夹
chdir()/fchdir()             改变当前工作目录/通过一个文件描述符改变当前工作目录
chroot()                 改变当前进程的根目录
listdir()                 列出指定目录的文件
getcwd()/getcwdu()          返回当前工作目录/功能相同, 但返回一个 Unicode 对象
mkdir()/makedirs()           创建目录/创建多层目录
rmdir()/removedirs()           删除目录/删除多层目录访问/权限
access()                 检验权限模式
chmod()                 改变权限模式
chown()/lchown()             改变 owner 和 group ID/功能相同, 但不会跟踪链接
umask()                 设置默认权限模式文件描述符操作
open()                   底层的操作系统 open (对于文件, 使用标准的内建 open() 函数)
read()/write()               根据文件描述符读取/写入数据
dup()/dup2()               复制文件描述符号/功能相同, 但是是复制到另一个文件描述符
设备号
makedev()                从 major 和 minor 设备号创建一个原始设备号

major() /minor()               从原始设备号获得 major/minor 设备号

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()                   两个路径名是否指向同个文件

转载于:https://www.cnblogs.com/hacker-hzh/archive/2013/03/25/2981392.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值