python自学笔记(4)--Python文件对象、os模块及pickle
Python内置函数open()用于打开和创建文件。Open函数有三个参数:文件名,打开模式(r只读,w写入,a附加,即从文件尾部附加,模式后面附加“+”表示同时支持输入和输出;模式后加“b”表示用二进制方式打开)和缓冲区参数(定义输出缓存,0表示无缓冲,1表示使用缓冲,负数表示操作系统默认缓冲大小)
p.s.若文件不存在,此时以读方式打开会报错,以写模式或附加模式打开会自动创建文件。使用next的迭代的方式不会移动文件指针,使用readline或readlines会移动文件指针。
''' test.txt原始文件为下面三行文字 he decided on roast chicken and vegetables, with apple pie to follow. 运行最后的结果是5行文字: he decided on roast chicken and vegetables, with apple pie to follow. write something. write one line. ''' f = open('test.txt','rt+') print(f.read(5))#he de读取5个字符 print(repr(f.readline()))#'cided on roast chicken and vegetables,\n'第一行的余下部分,包含最后的换行符 c = f.tell();print(c)#45 print(f.readlines())#['with\n', 'apple pie to follow.']游标在read时会向后移动 f.seek(c)#将游标移动到readlines之前 , 在文本文件中,没有使用b模式选项打开的文件,只允许从文件头开始计算相对位置,从文件尾计算时就会引发异常。 print(f.__next__())#'with\n' print(f.__next__())#'apple pie to follow.this is writing text.'next后直接调用tell会报错,原因是next函数找那个会置一个_telling标志位为false,而tell中会判断这个标志位。 print(f.readlines())#[] print(f.tell())#表明游标cursor位置为71 f.write('\n')#写操作同样会让cursor后移 print(f.tell())#表明游标cursor位置为73 f.write('write something.\n') f.writelines('write one line.') f.flush() f.close()
seek方法说明如下:
seek(offset,whence=0)offset:开始的偏移量,也就是代表需要移动偏移的字节数whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。默认为0 在文本文件中,没有使用b模式选项打开的文件,只允许从文件头开始计算相对位置,从文件尾计算时就会引发异常。
f.truncate(f.tell())#截断文件从文件开始到文件指针所在位置。
f.softspace 为0时写入时不会自动加空格,为1时自动加空格
f.mode 读写模式
import os path = os.getcwd()#获取当前工作路径 os.mkdir(path + '//'+ "ddd")#创建一个单级目录 os.chdir("D://")#相当于cd命令 os.listdir(path)#列出制定目录下的所有文件名 os.makedirs(path + '//' + 'hahahrroa'+ '//' + 'ee'+ '//' + 'ee')#创建多级的(含单级)目录 os.rmdir(path + '//'+ "ddd") #删除一个目录 os.removedirs(path + '//' + 'hahahrroa'+ '//' + 'ee'+ '//' + 'ee')#删除多级目录
文件:
os.mkfifo()#创建管道
os.mknod()#创建设备文件
os.remove()#用来删除文件
os.unlink()用来删除文件
os.rename()重命名文件
os.stat()返回文件状态信息
os.symlink()创建一个文件链接
os.utime()更新时间戳
os.tmpfile()创建并打开一个新的临时文件
os.walk()遍历目录下的文件目录
访问权限:
os.access()判定某一用户对指定目录是否有权限
os.chmod()修改目录或文件的权限
os.chmod(path, 0o0777)
os.chown()
os.umask()设置默认权限模式
文件:
open()
read()
write()
设备文件:
mkdev()创建设备
major()从指定设备的
minor()
os.path:
跟文件路径相关
basename():路径基名
dirname():路径目录名
join():将多个离散的基名和路径名连接起来
split():返回dirname和basename的元组
信息:
getatime():
getctime():
getmtime():
getsize():返回文件大小
查询:
exists():判断指定文件是否存在
isabs():判断指定的路径是否为绝对路径
isfile():是否为文件
isdir():是否为路径
islink():是否符号链接
ismount():是否为挂载点
samefile():两个路径是否指向同一个文件
pickle(与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。)在编程时可以将一些大数据的字典通过pickle写入到文件中,这样可以减少代码文件的大小,使得程序更加的优雅。
import os import pickle d1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}; path = os.getcwd(); f1 = open(path + '//' + 'text.txt', 'wb+')#此处必须是wb,否则会报错,pickle默认是以二进制来进行读取的 pickle.dump(d1, f1)#讲字典数据写入到text.txt中,将字典数据倒入泡菜缸中 f1.flush() f1.close() f6 = open(path + '//' + 'text.txt', 'rb')#此处必须有rb,否则报错 d2 = pickle.load(f6)# 从text.txt中读取数据到字典中 print(d2)#{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}