`
linvar
  • 浏览: 258971 次
  • 性别: Icon_minigender_1
  • 来自: 未定
社区版块
存档分类
最新评论

python2.x学习笔记(10) -- 文件和输入输出

阅读更多
1. 文件对象不仅可以用来访问普通的磁盘文件, 而且也可以访问任何其它类型抽象层面上的"文件". 一旦设置了合适的"钩子", 你就可以访问具有文件类型接口的其它对象, 就好像访问的是普通文件一样.

2. 作为打开文件之门的"钥匙", 内建函数 open() [以及 file() ]提供了初始化输入/输出(I/O)操作的通用接口. open() 内建函数成功打开文件后时候会返回一个文件对象, 否则引发一个错误.当操作失败, Python 会产生一个 IOError 异常
file_object = open(file_name, access_mode='r', buffering=-1)

3. 通常, 文件使用模式 'r', 'w', 或是 'a'模式来打开, 分别代表读取, 写入和追加. 还有个 'U' 模式, 代表通用换行符支持.
  指示文件打开模式的字符串中也可以包含字符 "b" , 但它不能做为第一个字符出现.这样做的目的是为了严格地满足 ANSI C3.159-1989 (即 ANSI C)中的规定; 事实上它没有任何效果, 所有POSIX 兼容系统, 包括 Linux , 都会忽略 "b" (其它系统可能会区分文本文件和二进制文件, 如果你要处理一个二进制文件, 并希望你的程序可以移植到其它非 Unix 的环境中, 加上"b" 会是不错的主意

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

5. 文件内建属性
文件对象的属性         描述
file.closed    True 表示文件已经被关闭, 否则为 False
file.encoding
文件所使用的编码 - 当 Unicode 字符串被写入数据时,
它们将自动使用 file.encoding 转换为字节字符串;
若 file.encoding 为 None 时使用系统默认编码
file.mode      文件打开时使用的访问模式
file.name      文件名
file.newlines 未读取到行分隔符时为 None , 只有一种行分隔符时为一个字符串, 当
               文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束
               符的列表
file.softspace  为 0 表示在输出一数据后,要加上一个空格符,1 表示不加。这个属性
一般程序员用不着,由程序内部使用。

6. 通用换行符支持(UNS)
当你使用 'U' 标志打开文件的时候, 所有的行分割符(或行结束符, 无论它原来是什么)通过 Python 的输入方法(例如 read*() )返回时都会被替换为换行符 NEWLINE(\n). ('rU' 模式也支持 'rb' 选项) . 这个特性还支持包含不同类型行结束符的文件. 文件对象的 newlines 属性会记录它曾“看到的”文件的行结束符.

7. 有助于跨平台开发的 os 模块属性
  os 模块属性   描述
  linesep   用于在文件中分隔行的字符串(\n)
  sep     用来分隔文件路径名的字符串(/)
  pathsep   用于分隔文件路径的字符串(:)
  curdir    当前工作目录的字符串名称(.)
  pardir    (当前工作目录的)父目录字符串名称(..)
  不管你使用的是什么平台, 只要你导入了 os 模块, 这些变量自动会被设置为正确的值, 减少了你的麻烦.

8. 标准文件
    一般说来, 只要你的程序一执行, 那么你就可以访问三个标准文件. 它们分别是标准输入(一般是键盘), 标准输出(到显示器的缓冲输出)和标准错误(到屏幕的非缓冲输出). (这里所说的"缓冲"和"非缓冲"是指 open() 函数的第三个参数.) 这些文件沿用的是 C 语言中的命名, 分别为stdin , stdout 和 stderr . 我们说"只要你的程序一执行就可以访问这三个标准文件", 意思是这些文件已经被预先打开了, 只要知道它们的文件句柄就可以随时访问这些文件.
    Python 中可以通过 sys 模块来访问这些文件的句柄. 导入 sys 模块以后, 就可以使用sys.stdin , sys.stdout 和 sys.stderr 访问. print 语句通常是输出到 sys.stdout ; 而内建raw_input() 则通常从 sys.stdin 接受输入.

9. sys 模块通过 sys.argv 属性提供了对命令行参数的访问。
argv 变量代表一个从命令行上输入的各个参数组成的字符
串数组;该列表的第一项 sys.argv[0] 永远是程序的名称.

10. 对文件系统的访问大多通过 Python 的 os 模块实现. 该模块是 Python 访问操作系统功能的主要接口.

11. os 模块的文件/目录访问函数
文件处理
mkfifo()/mknod()     创建命名管道/创建文件系统节点
remove()/unlink()       Delete file 删除文件
rename()/renames()      重命名文件
*stat ()                返回文件信息
symlink()         创建符号链接
utime()               更新时间戳
tmpfile()         创建并打开('w+b')一个新的临时文件
walk()           生成一个目录树下的所有文件名

目录/文件夹
chdir()/fchdir()a 改变当前工作目录/通过一个文件描述符改变当前工作目录
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 设备号

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

13. 永久存储模块
大部分永久性储存模块是用来储存字符串数据的, 但是也有方法来归档 Python 对象.
Python 提供了许多可以实现最小化永久性储存的模块. 其中的一组( marshal 和 pickle )可以用来转换并储存 Python 对象. 该过程将比基本类型复杂的对象转换为一个二进制数据集合,这样就可以把数据集合保存起来或通过网络发送, 然后再重新把数据集合恢复原来的对象格式.这个过程也被称为数据的扁平化, 数据的序列化, 或者数据的顺序化.

14. marshal 和 pickle 模块的区别在于 marshal 只能处理简单的 Python 对象(数字, 序列, 映射, 以及代码对象), 而pickle 还可以处理递归对象, 被不同地方多次引用的对象, 以及用户定义的类和实例. pickle 模块还有一个增强的版本叫 cPickle , 使用 C 实现了相关的功能.

15. shelve 模块使用 anydbm 模块寻找合适的 DBM 模块, 然后使用 cPickle 来完成对储存转换过程. shelve 模块允许对数据库文件进行并发的读访问, 但不允许共享读/写访问. 这也许是我们在 Python 标准库里找到的最接近于永久性储存的东西了.
分享到:
评论

相关推荐

    python学习笔记

    ### Python学习笔记知识点详解 #### 一、程序基本编写方法 **1. 程序注释** - **单行注释**: 使用`#`符号。例如:`# 这是一条注释` - **多行注释**: 使用三个单引号`'''`或三个双引号`"""`包裹。例如: ```...

    《Python Standard Library》学习笔记(原书为 Python2.X 版,在学习的过程中,用 Py.zip

    1. **内置模块**:Python内建了多个模块,如`sys`用于获取系统相关信息,`os`提供了与操作系统交互的接口,`io`处理输入输出流,以及`time`和`datetime`处理时间日期。 2. **网络编程**:`socket`模块提供了低级别...

    Python-基础学习笔记.docx

    编写Python程序时,通常遵循IPO(输入、处理、输出)方法,即先接收输入,进行处理,然后输出结果。 6. Python程序语法 Python程序包含注释、变量、表达式、分支语句、循环语句和函数等基本元素。Python代码使用缩...

    python基础教程(第三版)学习笔记.pdf

    Python 2.x和3.x是两个独立的版本,有着显著的区别,例如3.x版本不再支持print作为语句而是函数,同时增加了许多新特性。 `__future__`模块是Python 2.x中的一个特殊模块,允许开发者在2.x版本中使用部分3.x的新...

    Python笔记.pdf

    为了避免这种情况,可以在程序的末尾加上 `input()` 语句(在 Python 3.x 中是 `input()`,Python 2.x 中则是 `raw_input()`)。这会让程序暂停并等待用户按键后才退出,从而便于观察程序的输出。 #### 四、Python ...

    python中文api文档+学习笔记

    最后,`pythonAPI和学习笔记大礼包` 这个文件很可能包含了一位开发者或者教育者整理的Python学习笔记,可能包括个人的理解、实例代码、常见问题解答等。这样的笔记通常具有很高的实用价值,因为它们是实践经验和思考...

    python3基础廖雪峰教程笔记-1.pdf

    这篇笔记主要基于廖雪峰的Python3基础教程,涵盖了从安装、编写第一个Python程序到文本编辑工具的选择,以及基本的输入输出、语法特点和数据类型。 首先,安装Python时要注意有两个主要版本:2.x 和 3.x。由于3.x ...

    python.pdf笔记

    2. **Python 3.x**:Python 3系列是Python语言的主要发展方向,它在语法、功能和性能方面都进行了重大改进。 ### Python基础知识 1. **基本概念**:介绍了Python的基本概念,包括其设计哲学和特点。 2. **安装与...

    试卷python学习笔记.docx

    Python 学习笔记 在本文中,我们将探讨 Python 编程语言的基础知识点,涵盖列表、变量、赋值语句、控制流、函数等方面。 一、选择题 1. 列表在 Python 中的作用非常强大,它可以包含多个数据元素,下面是列表的...

    python学习笔记(个人整理).doc

    本文主要基于“Python学习笔记”的部分内容,详细阐述Python的基础知识,包括环境配置、基本语法、数据类型以及字符串操作。 首先,Python开发环境PyCharm的配置是学习的起点。你可以通过`File` -> `Settings` -> `...

    最新Python学习笔记1

    通过这份学习笔记,初学者可以了解到Python的基础知识,包括但不限于Python的历史、版本、跨平台能力、基础语法、常用函数、数据类型、输入输出方法、以及一些常见的编程问题和解决方案。掌握这些知识点将有助于初学...

    02-python-判断语句-循环-列表推导式-函数

    02.17-python函数.ipynb、02.15-python循环.ipynb、02.14-python判断语句.ipynb和02.16-python列表推导式.ipynb这些笔记文件将详细阐述每个主题,并提供实例和练习,帮助你深入理解Python编程的基础。通过深入学习...

    莱斯大学python作业.zip

    这样的资源通常包括编程练习、项目代码和学习笔记,对于深入理解Python语言及其应用非常有帮助。 【描述】"Python学习笔记,复习巩固,大作业!!!"这句话揭示了文件内容的几个关键点: 1. **学习笔记**:这些...

    2.蛤蟆PYTHON脚本学习笔记二基本命令畅玩.pdf

    在"蛤蟆PYTHON脚本学习笔记二基本命令畅玩"中,主要讲解了Python编程的一些基础知识,包括数字和表达式、变量及语句、获取输入、内置函数、模块的使用,以及如何保存和执行Python脚本。 1. 数字和表达式:Python...

    python学习笔记精品.doc

    【Python 缩进的作用】 在Python编程语言中,缩进是非常关键的部分,它...以上是对给定的Python学习笔记精品中部分知识点的详细解析,涵盖了Python的基础语法、数据类型、控制结构、函数使用以及文件操作等相关内容。

    简明python教程_个人学习笔记.pdf

    Python 2.x中,可以使用`%`操作符进行字符串格式化,如`print 'My name is %s and I am %d years old.' % ('Alice', 25)`。在Python 3.x中,推荐使用`format()`函数进行更灵活的格式化,如`print('My name is {} and...

    Python学习笔记纯干货新手入门必备

    这篇学习笔记旨在为初学者提供一条清晰的学习路径,从环境搭建到实际编程,涵盖了Python的基础知识和核心概念。 1. **Python环境搭建**: - Python简介:Python是一种解释型、面向对象、动态数据类型的高级程序...

    python入门级教程学习笔记 python3版本,文件内的程序均可运行.rar

    2. 输入与输出:使用`input()`函数获取用户输入,`print()`函数输出信息。 3. 注释:单行注释使用`#`,多行注释可以使用三引号`"""`包围。 二、控制结构 1. 条件语句:`if`、`elif`、`else`用于实现条件判断。 2. ...

Global site tag (gtag.js) - Google Analytics