Python:文件操作

一、文件打开方式

格式:open(file, mode = 'r', buffering = -1, encoding = None, errors = None, newline = None, closefd = True, open = None)

==>一般常用file、mode两个参数;

#file:被打开文件所在地址 + 文件名;若只有文件名,认为是在当前目录下打开文件(正则执行的.py文件所有文件夹);默认位置为当前;

#mode:文件打开的模式;

#buffering:指定文件缓冲模式及缓冲区的大小;

  A、buffering = n,n > 1 :设定缓冲模式为全缓冲,缓冲区大小为n个字节;

  B、buffering = 1:设定缓冲模式为行缓冲,遇到换行符 '\n' 时进行系统调用,也就是I/O操作,将数据写入磁盘;

  C、buffering = 0:此为无缓冲你模式,只要有数据,就直接进行系统调用,也就是进行I/O操作,将数据写入磁盘;

  #系统调用:向操作系统申请一个服务,操作系统响应后,帮助调用硬件的驱动程序,这种操作也称为I/O操作;

(可参考:问题22:如何设置文件的缓冲

 

模式 执行操作
‘r’ 以只读方式打开文件(默认);#若文件不存在,报异常,不新建;
‘w’ 以写入的方式创建新文件;#若文件名存在,将其覆盖;
‘x’ 新建文件;#如果文件存在,引发异常;
‘a’  以写入方式打开文件;#若文件存在,可在文件后追加内容;若文件不存在,新建文件;
‘b’ 以二进制模式打开文件;#如‘rb’、‘wb’、‘ab’、‘xb’等;
‘t’ 以文本模式打开文件(默认);
‘+’ k可读写模式;(添加到其它模式中使用)
‘U’ 通用换行符支持

f = open('test.txt', 'w') s = '这小伙真帅' f.write(s) f.close f = open('test.txt') print(type(f)) #输出:<class '_io.TextIOWrapper'> #_io.TextIOWrapper:是什么意思? print(list(f)) #输出:['这小伙真帅']

 二、文件对象的方法

文件对象的方法 执行操作 语法格式
close() 关闭文件; f.close()
read(size = -1)

从文件中读取size个字符(不是字节),若未给定size值或给负值时,

读取剩余的(从文件指针位置)所有字节然后做为字符串返回;

f.read(n):

从指针位置起,读取n个字节

readline() 从文件指针位置开始,读取一整行字符串;#一整行:以换行符 ‘\n’ 来分行; f.read()
write(str) 将字符串写入文件;  #所写入的数据必须是字符串; f.write('字符串')
writelines(sep) 向文件写入字符串序列sep;#sep是一个返回字符串的可迭代对象,不是字符串本身; f.writelines(字符串的可迭代对象)
seek(offset, from)

移动文件指针;#从offset(0/1/2)处,偏移from个字节;

#0代表文件起始位置;1代表指针当前位置;2代表文件末尾;

#from为具体的正整数;

f.seek(1, size):

#从当前指针位置移动size个字节;

tell() 返回指针当前位置;#结果为正整数,表示指针距离文件起始位置的字节数; f.tell()

 

 #文件指针:相当于一个‘书签’,对文件进行引索、读取、写入时,从指针位置开始操作;

#一个字符是1个字节;一个汉字是2个字节;

#文件本身可以看做是一个字符串,读取文件时,返回文件对象,可以被迭代操作,与字符串迭代操作一样;

f = open('test.txt', 'w')
for i in f:
    print(i)
#输出:这小伙真帅

 

三、python文件系统方法

 1)OS模块中关于文件/目录常的函数

#对于文件系统的访问,Python一般通过OS模块来实现;

#Python是夸平台的语言:同样的源代码在不同的操作系统上执行时,不需要修改;

#OS:系统模块;(Operating System)

#使用OS模块下的方法前,先导入OS模块:import os

 

 OS模块中关于文件/目录常的函数

 

函数名 功能 语法格式
getcwd() 返回当前工作目录;#即当前工作的物理地址 os.getcwd()
chdir(path) 改变工作目录;#path指代需要切换到的目录 os.chdir(path)
listdir(path = '.')

l列举指定目录中的文件名(包含文件夹的名字),其中文件名带格式(如'.py'、'.txt'),以['str1', 'str2']形式返回;

#'.':表示当前工作目录,也是默认值; #'..':表示工作目录的上一层目录;

#path指定具体地址,如('E:\pythonwj'):返回指定地址下的文件名;

os.listdir(path = '.')
mkdir() 在当前工作目录下,创建单个文件夹(不是文件);#如果文件夹已存在,抛出异常; os.mkdir()
makedirs(path)

在指定目录下,创建多层文件夹;#如果文件夹已存在,抛出异常;

#例1:os.makedirs(r'.\a\b\c'):a在当前工作目录下,b在a文件夹下,c在b文件夹下;

#r'.\a\b\c':要加r,表示原始字符串;若在当前工作目录下创建,要加 '.\' ;

#例2:os.makedirs(r'E:\pythonwj\a\b\c')

os.makedirs(path)

 remove(path) 删除当前工作目录下指定的文件;#不是文件夹   os.remove(path)
rmdir(path)  删除当前工作目录下指定的单层文件夹;#文件下不在有其它文件;  os.rmdir(path) 
removedirs(path) 

删除当前工作目录下指定的多层文件;#连同文件夹下的其它文件夹同时删除;

#os.removedirs(r'a\b\c'):删除当前工作目录下的a文件夹,以及a文件夹下的b、c文件夹; 

os.removedirs(path) 
rename() 

重命名当前工作目录下的文件夹或文件;

#os.rename('文件名1/文件夹名1', '文件名2/文件夹名2'):

==>将当前目录下的文件1/文件夹1,更名为 文件2/文件夹2

 os.rename(name1,name2)
 system()

s使用系统的小工具;

#例:os.system('calc'):打开系统的计算器; 

 os.system('小工具代码')
 walk(top)

 遍历top参数指定路径下的所有子目录,并将结果返回一个三元组(路径, [包含目录], [包含文件])

#top:需要遍历的顶级目录的路径

 os.walk(top)

 

 扩展

os.curdir表示当前目录('.');

os.pardir表示上一级目录('..');

os.sep表示路径的分隔符,比如Windows系统下为‘\\’,Linux系统下为‘/’;

os.linesep表示当前平台使用的行中支符;(Windows下为‘\r\n’,Linux下为‘\n’)

os.name表示当前使用的操作系统;

import os
print(os.sep)
#输出:\

#walk(top)用法,及与os.path.walk()的区别,参见:Python:os.walk()和os.path.walk()用法

实例:

import os

for i in os.walk(r'E:\pythonwj'):
    print(i)
#输出:
# ('E:\\pythonwj', ['Chapter_2', 'Chapter_3', 'Chapter_4', 'Chapter_5', 'Chapter_6'], [])
# ('E:\\pythonwj\\Chapter_2', [], ['0_0.py', '2_1.py', '2_2.PY', '2_3.py'])
# ('E:\\pythonwj\\Chapter_3', [], ['0-0.py', '3-1.py', '3-3-1.py', '3-3-2.py', '3-4.py', '3-5.py'])
# ('E:\\pythonwj\\Chapter_4', [], ['0-0.py', '0.py', '00.py', '4-1.py', '4-2.py', '4-4.py', '4-5.py', '4-6.py', 'record.txt', 'test.txt', 'test_1.txt', 'test_2.txt', 'test_3.txt', 'txt'test_2.txt', 'test_3.txt', 'txt.py'])
# ('E:\\pythonwj\\Chapter_5', [], [])
# ('E:\\pythonwj\\Chapter_6', [], [])

 

 二)os.path模块中关于路径常用的函数

os.path模块中关于路径常用的函数
函数名 功能及使用方法
basename(path) 去掉目录路径,单独返回文件名
dirname(path) 去掉文件名,单独返回目录路径;
join(path1[, path2[, ...]]) 将path1和path2各部分组合成一个路径名;#多用于创建文件时,指定该文件的路径:os.path.join(path, file)
split(path)

分割文件名和路径,返回(f_path, f_name)元组;

#如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在;

splitext(path) 分离文件名和扩展名,返回(f_name, f_extension)元组;
getsize(file) 返回指定文件的尺寸,单位字节;
getatime(file) 返回指定文件最近访问的时间:浮点型秒数;(可用time模块的gmtime()或者localtime()函数换算)
getctime(file) 返回指定文件的创建时间:浮点型秒数;(可用time模块的gmtime()或者localtime()函数换算)
getmtime(file) 返回指定文件最新的修改时间:浮点型秒数;(可用time模块的gmtime()或者localtime()函数换算)

 扩展:os.path.abspath(path):获取指定文件的路径,不含文件名;

以下函数返回True或False

函数名 功能与使用方法
exists(path) 判断指定路径(目录或者文件)是否存在
isabs(path) 判断指定路径是否为绝对路径
isdir(path) 判断指定路径是否存在且是一个目录
isfile(path) 判断指定路径是否存在且是一个文件
islink(path) 判断指定路径是否存在且是一个符号链接
ismount(path) 判断指定路径是否存在且是一个挂载符
samefile(path1, path2) 判断path1和path2两个路径是否指向同一个文件

 

四、pickle模块

 1)功能:多用于直接将一个完整的列表、字典、类的实例,存储到文件内;

  #当然,它可以保持任何想保存的数据;

 2)思路:将列表、字典、类的实例,这些数据,转换成二进制的形式进行存储;

 3)格式:

  1)pickle.dump(数据, 文件/文件对象):将数据存入文件;

  2)my_date = pickle.load(文件/文件对象):读取数据;

 4)注意事项:

  A、打开文件,要以二进制形式;

  B、为便于区分记忆,此类文件后缀,建议使用:.pkl或.pickle;

 

 #此类文件为二进制文件,无法用记事本打开,打开时会显示乱码;

posted @ 2018-04-12 11:54  何永灿  阅读(502)  评论(0编辑  收藏  举报