五、文件管理

一、磁盘文件

1.1 打开、关闭磁盘文件

(1)open()函数

文件对象=open(文件名,访问模式='r',缓冲方式='-1')

#以'w+'模式打开文件,再写入内容并读出
myfile=open('d:\\firstfile.txt','w+')
myfile.write('my firstfile\n')
myfile.write('hello cc\n')
myfile.seek(0,0)
for eachline in myfile:
    print eachline
myfile.close()

文件访问模式:

r 以读取方式打开文件
rU或U 读取方式,同时提供通用换行符支持
w 写入
a 追加
r+ 读写
w+ 读写
a+ 读写
rb 二进制读取
wb 二进制写入
ab 二进制追加
rb+ 二进制读写
wb+ 二进制读写
ab+ 二进制读写

1)使用'r'、'U'、'r+'、'rb+'模式打开的文件必须已经存在,否则报错

2)使用'w'、'w+'、'wb'、'wb+'模式打开的文件,若不存在则自动创建,若存在则清空再写入

3)使用'a'、'a+'、'ab'、'ab+'模式打开的文件,若不存在则自动创建,若存在则在文件末尾追加,即使使用seek()移动文件指针也会追加到末尾

4)文件路径:d:\\myfile.txt  或  r'd:\myfile'   或  d:/myfile.txt  

(2)file()函数

建议打开文件进行操作时使用open()函数,处理文件对象时使用file()函数

(3)close()函数

(4)with语句

引入with语句保证退出时调用close()函数

with open(r'd:\myfile.txt','w') as myfile:
    myfile.write('hello\n')
    myfile.write('cc\n')

等价于:

myfile=open(r'd:\myfile.txt','w')
try:
    myfile.write('hello\n')
    myfile.write('cc\n')
finally:
    myfile.close()

1.2 写文件

(1)write()函数

写字符串

(2)writelines()函数

写字符串列表

listh=['天中','一','你说呢','螃中尼']
myfile.writelines(listh)

1.3 读文件

(1)read()函数

read([size])

(2)readlines()函数、readline()函数

readline()函数读取一行,包含结束符

readlines()函数读取所有行,返回值为一个字符串列表

myfile=open(r'd:\myfile.txt','r')
yu=myfile.readlines()
for eachline in yu:
    print eachline
myfile.close()

输出结果中间有两次换行,这是因为读出的字符串本身带有换行符,而print后面没有“,”,也自动换行导致的。可以改成:

       print eachline,

这样就不会多换行了。

(3)文件迭代

文件对象也是迭代器,前面的代码可以写成:

myfile=open(r'd:\myfile.txt','r')
#yu=myfile.readlines()省略
for eachline in myfile:
    print eachline
myfile.close()

1.4 文件指针操作

seek(偏移量[,相对位置])

seek()用于移动文件指针到不同的位置,相对位置默认为0,表示从开头算起,1表示当前位置,2表示末尾。

tell()用于检测文件指针的位置。

偏移量的单位为字节。

二、StringIO类文件

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。

文件处理接口不仅能处理磁盘文件,其中的处理函数还可用于与文件对象类似的对象,凡是提供了read()和write()这两个面向文件操作函数的对象,被统称为类文件对象(file-like Object)。

python的标准库中有许多类文件,如sys.stdin、sys.stdout、sys.stderr。sys.stdin(标准输入)为解释器提供输入字符流,sys.stdout(标准输出)接收print语句的输出。sys.stderr(标准错误)接收出错信息。sys.stdin通常被映射到用户键盘输入;stdout和stderr产生屏幕输出。

StringIO就是在内存中创建的fili-like Object,经常被用来作字符串的缓存,即StringIO能将内存数据当成文件来操作。因为StringIO的一些接口和文件操作是一致的,也就是说同样的代码,可以同时当成文件操作或者StringIO操作。

2.1 创建StringIO类文件

使用构造函数StringIO()创建StringIO类文件。

Python2:

import StringIO as sio
f=sio.StringIO()
ff=sio.StringIO("StringIO Example\n")

Python3:

from io import StringIO
f=StringIO()
ff=StringIO("StringIO Example\n")

2.2 读写StringIO类文件

读写StringIO文件与读写普通磁盘文件类似

import StringIO as sio
ff=sio.StringIO()
#写入一行
ff.write('have a nice day\n')
#写入多行
ff.writelines(['well begun is half done\n','every thing is ok\n'])
ff.read()#此时因为指针在文件末尾,所以读出空字符
#移到指针到文件头
ff.seek(0,0)
ff.read()#读出所有内容

ff.seek(0,0)
#读出第一行
ff.readline()
#读出剩余行
for eachline in ff.readlines():
    print eachline,

可以看到,使用read()比较费劲,为了便于获取内存文件的内容,StringIO提供了getvalue()函数,这样就不用再移动指针了。

2.3 使用StringIO模块捕获输出

通常,输出是默认输出到显示器,但是通过修改标准文件sys.stdout,可以将标准输出改为输出到内存。

#将print输出的内容先输入到内存,检查并替换后再输出到显示器
import sys
import StringIO as sio
f=sio.StringIO()
stdout=sys.stdout
#将标准输出改为输出到内存
sys.stdout=f
print 'matlab'
print 'c++'
print 'computer'
print 'java'
#在内存中进行替换
strf=f.getvalue().replace('computer','python')
#标准输出到显示器
sys.stdout=stdout
print u'原始输出'
print f.getvalue()
print u'替换后输出'
print strf
f.close()

三、文件系统操作

文件操作中,除了读写文件,还会用到其他功能,如删除文件、重命名文件、创建目录、删除目录、遍历目录树、管理文件访问权限、管理文件路径等。python中的os模块和os.path模块可以完成这些操作。

3.1 os模块

os模块提供了Python访问操作系统功能的主要接口,其实os模块只是包装了不同操作系统的通过接口,用户可以使用相同的函数接口,操作不同的操作系统,并返回相同的结果。不同的操作系统,真正加载的模块不同。

#使用name属性查看加载的模块
import os
os.name#‘nt'

(1)os模块的跨平台属性

不同的操作系统间有很多差异,如不同操作系统所支持的分隔符不同,在Python中,程序员不需要考虑这些差异,os模块提供了相应的跨平台属性。

os模块属性 描述
linesep 行分隔符
extsep 扩展名分隔符
sep 路径分隔符
pathsep 多路径分隔符
curdir 返回当前目录

(2)os模块的文件/目录/操作函数

文件操作函数:

remove(filename)/unlink(filename) 删除文件
rename(旧文件名,新文件名) 更改文件名和路径
renames(旧文件名,新文件名) 更改文件名和路径,如果路径中不存在目录会自动建立
stat(文件名) 返回文件信息
utime(文件名,(访问时间,修改时间)) 更新访问时间和修改时间,如果指定为None,则用当前时间来更新
tmpfile() 创建并打开一个新的临时文件
import os
#创建文件并写入内容
f=open('d:\\we.txt','w')
f.write('hello\n')
f.close()
#显示文件信息
os.stat('d:\\we.txt')
#更新访问时间和修改时间
os.utime('d:\\we.txt',None)
#重命名,此时路径不存在,用rename会报错
os.renames('d:\\we.txt','d:\\python1\\we.txt')

目录操作函数:

chdir(目录) 改变当前工作目录
listdir(目录) 列出指定目录中文件
getcwd() 返回当前工作目录
mkdir(目录) 创建目录
mkdirs(目录) 可创建多层目录
rmdir(目录) 删除目录
removedirs(目录) 删除多层目录
walk(目录,topdown=True,onerror=None) 参数目录:指定要遍历的目录。
#目录操作函数
import os
#显示当前工作目录
os.getcwd() #C:\\Users\\cheng
#更改当前目录
os.chdir('d:\\python')
#显示当前工作目录
os.getcwd() #d:\\python
#显示当前目录下文件
os.listdir('.')
#创建子目录
os.mkdir('tyu')
#更改当前目录
os.chdir('.\\tyu')
#显示当前工作目录
os.getcwd() #d:\\python\\tyu
#创建多级子目录
os.makedirs('d1\d2\d3')
#更改当前目录
os.chdir('d1')
#显示当前目录
os.getcwd()
#更改当前目录
os.chdir('d2\\d3')
#显示当前目录
os.getcwd() #d:\\python\\tyu\\d1\\d2\\d3
#删除子文件夹d3
os.rmdir('d:\\python\\tyu\\d1\\d2\\d3')
#上面的报错:WindowsError: [Error 32] : 'd:\\python\\tyu\\d1\\d2\\d3'不知道为什么报错
#下面也报错了。。。。[Error 3] : 'tyu\\d1\\d2'
os.removedirs('tyu\d1\\d2')

#遍历目录
for i in os.walk('d:\\python'):
    print i

os.chdir('d:\\python')
#创建子目录
os.mkdir('we')
os.chdir('we')
os.getcwd()#d:\\python\\we
#在目录下创建文件
f=open('f1.txt','w')
f.write('file one')
f.close()

#遍历目录
for i in os.walk('d:\\python'):
    print i

权限管理函数:

access(文件名,模式) 检验文件权限模式
chmod(文件名,模式) 更改文件权限模式
umask(权限模式) 设置新权限模式,并返回旧权限模式

3.2 os.path模块

os.path模块提供对文件路径操作的函数,可以操作文件路径的各个部分。

路径查询函数

exists(路径) 查询路径是否存在,返回True或False
isabs(路径) 查询路径是否为绝对路径,返回True或False
isdir(路径) 查询路径是不是已存在路径,如果路径中有文件名,则返回False
isfile(路径) 查询路径是不是已存在文件,如果路径中有文件名,则返回False

文件信息查询函数

getatime(文件名) 查询文件最近访问时间
getctime(文件名) 查询文件创建时间
getmtime(文件名) 查询文件最近修改时间
getsize(文件名) 查询文件大小(以字节为单位)

路径分隔函数

basename(路径) 取路径中的文件名
dirname(路径) 去文件名,取路径中的目录路径
join(路径1[,路径2[.....]]) 将多个路径组合组合后返回,第一个绝对路径之前的参数将被忽略
split(路径) 返回(目录路径,文件名)元组
splitdrive(路径) 返回(盘符,不含盘符路径)元组
splitext(路径) 返回(路径和主文件名,扩展名)元组

3.3 shutil模块

shutil模块提供了高级的文件和文件夹访问功能,包括复制文件、删除文件、复制文件的访问权限、递归地复制目录树等。

(1)目录和文件操作

copyfileobj(源类文件名,目标类文件名[,长度]) 将源类文件对象的内容复制到目标类文件对象
copyfile(源文件名,目标文件/目录名) 将源类文件的内容复制到目标文件
copymode(源文件名,目标文件名) 将权限信息从源文件复制至目标文件,其他信息不受影响
copystat(源文件名,目标文件名) 将权限信息、最后访问时间、最后修改时间、文件状态复制
copy(源文件名,目标文件名) 将源文件复制到目标文件
copy2(源文件名,目标文件名) 相当于先调用copy(),再调用copystat()函数
copytree(源目录,目标目录) 将源目录下的整个目录树复制到目标目录下,目标目录必须原来不存在
rmtree(目录) 删除整个目录
move(源文件/目录,目标目录) 将源文件或目录移至目标目录下

(2)压缩函数

make_archive(文件名,格式,[根目录,[基础目录]])

创建归档文件(zip或tar),文件名需包含路径,格式参数可以是zip、tar、

bztar、gztar,根目录和基础目录默认都是当前目录

get_archive_formats() 返回支持的列表格式,默认支持zip、tar、bztar、gztar

四、Python读写Excel文件

4.1 xlwt库

4.2 xlrd库

4.3 xlutils库

猜你喜欢

转载自blog.csdn.net/cc27721/article/details/82464683