python 核心编程 第九章
文件的输入和输出
打开文件
使用open()或者file()这两个函数是等效的。
r 以读方式打开
rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278)
w 以写方式打开 (必要时清空)
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )
文件的输入输出
-
read() 直接读取字节到字符串,读取到给定数目的字节
readline()读取文件的一行(包括行结束符),size参数默认为-1,代表读到行结束符。
readlines()读取所有剩余行,返回一个字符串列表,参数sizhint表示返回最大字节的大小。 -
truncate()它接受一个可选的 size 作为参数. 如果给定, 那么文
件将被截取到最多 size 字节处. 如果没有传递 size 参数, 那么默认将截取到文件的当前位置.
例如, 你刚打开了一个文件, 然后立即调用 truncate() 方法, 那么你的文件(内容)实际上被删除,
这时候你是其实是从 0 字节开始截取的( tell() 将会返回这个数值 ).
如果要删除行分隔符使用.strip()函数: [line.strip() for line in f.readlines()] -
write()把含有文本数据或者二进制数据写入到文件中。
writelines()给定一个列表,将它们写入文件,注意要自己加上结束符。 -
seek()移动文件指针到不同位置,offset字节代表相对于某个位置偏移量. 位置的默认值为 0 ,
代表从文件开头算起(即绝对偏移量), 1 代表从当前位置算起, 2 代表从文件末尾算起.
tell()是seek()的补充,返回文件指针的位置。
close()关闭文件。
flush()把缓冲区的数据立即写入文件。
跨平台
os 模块属性 描述
linesep 用于在文件中分隔行的字符串
sep 用来分隔文件路径名的字符串
pathsep 用于分隔文件路径的字符串
curdir 当前工作目录的字符串名称
pardir (当前工作目录的)父目录字符串名称
文件的内建属性
file.closed True 表示文件已经被关闭, 否则为 False
file.encoding文件所使用的编码 - 当 Unicode 字符串被写入数据时, 它们将自动使用 file.encoding 转换为字节字符串; 若 file.encoding 为 None 时使用系统默认编码
file.mode 文件打开时使用的访问模式
file.name 文件名
file.newlines未读取到行分隔符时为 None , 只有一种行分隔符时为一个字符串, 当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束符的列表
文件系统
os模块和os.path的部分函数
-
os模块的
mkfifo()/mknod()a 创建命名管道/创建文件系统节点
remove()/unlink() Delete file 删除文件
rename()/renames()b 重命名文件
*stat () 返回文件信息
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() a 从原始设备号获得 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() 两个路径名是否指向同个文件
永久存储模块
用处:存储大批数据和python对象。
可用模块:pickle 和 marshal 模块。
其他内容暂时不做过多了解,用到再查。。。2333
练习
9–2. 文件访问. 提示输入数字 N 和文件 F, 然后显示文件 F 的前 N 行
def read_file(file,N):
f = open(file)
for i in range(N):
print f.readline(),
f.close()
read_file("cj",2)
9–4. 文件访问. 写一个逐页显示文本文件的程序. 提示输入一个文件名, 每次显示文本
文件的 25 行, 暂停并向用户提示"按任意键继续.", 按键后继续执行.
def read_file(file):
f = open(file)
n = 0
for i in f.readlines():
print i,n
n+=1
if n%25:pass
else:raw_input("按回车后继续")
f.close()
read_file("cj")
9–9. Python 文档字符串. 进入 Python 标准库所在的目录. 检查每个 .py 文件看是否有
doc 字符串, 如果有, 对其格式进行适当的整理归类. 你的程序执行完毕后, 应该会生成一个
漂亮的清单. 里边列出哪些模块有文档字符串, 以及文档字符串的内容. 清单最后附上那些没有文
档字符串模块的名字.
附加题: 提取标准库中各模块内全部类(class)和函数的文档.
import os
def find_path(path=r"C:\Users\jike\Anaconda2\Lib"):
lists = []
for i in os.listdir(path):
if ".py" in i and ".pyc" not in i:
lists.append(path+"//"+i)
return lists
def find_doc(address):
has_doc = False
f = open(address)
str = ''
for i in f:
print i
if i.startswith('"""') and (not has_doc):
has_doc = True
str += i
elif has_doc and i.startswith('"""'):
str += i
has_doc = False
elif has_doc:
str+=i
else :
break
return str
for i in find_path():
print find_doc(i)