精通Python——IO文件编程

IO在计算机中指的是Input/Output,也就是输入输出。凡是用到数据交换的地方,都会涉及IO编程。在IO编程中,Stream(流)是一种重要的概念,分为输入流( Input Stream)和输出流( Output Stream)。

1 文件读写

1.1 文件打开

open (文件路径,打开模式,编码方式)

1)文件路径:
                绝对路径:从盘符开始到具体文件具体路径,如:C:/abc?1.txt
                相对路径:以操作的程序文件所在路径为参照物
                                  标记:               .   当前文件所在目录
                                                  ..  当前文件所在上一级目录
              路径分隔符:     \\   / ,使用  'r' 标记(r'\text\a\a\a')

2) 打开模式:
                 字符形式   r --只读     w --只写 ,先清空再写入     a --只写,续写
                 字节    rb wb ab
                 写时不存在会创建一个文件
3) 编码方式:
                字节不需编码

1.2 文件读取

f = open(r'c:\a.txt')

f.read()       读全部
f.read(10)    指针标到10,再读在指针之后
f.readline()  读取文本文件
f.readlines() 读取所有的行

f.close()

由于文件操作可能会出现IO异常,一旦出现IO异常,后面的close()方法就不会调用,所以可以使用try方法:

try:
    f = open (r 'c:\text.txt','r')
    print(f.read())
finally :
    if f:
        f.close ()

或者使用with语句,自动调用close()方法关闭文件

with open('/path/to/file', 'r') as f:

    f.read()

如小文件可以直接采取read()方法读到内存,大文件更加安全的方式是连续调用read(size):

src_path = r'.\01.jpg'

if os.path.exists(src_path):
    filename = os.path.basename(src_path)
    desc_path = os.path.join(r'.\img',filename)
    with open(src_path,'rb') as read_han,open(desc_path, 'wb') as write_han:
        file_size = os.path.getsize(src_path)
        has_read = 0
        read_size = 1024

        while has_read <= file_size:
            data = read_han.read(read_size)
            has_read += read_size
            write_han.write(data)
            write_han.flush()
    print('文件拷贝成功')
else:
    print('未找到源文件')

而对于配置文件等文本文件,使用readline()方法更加合理:

with open(r'c:\textlqiye.txt','r ') as fileReader:
    for line in fileReader.readlines () :
    print line.strip ( )

1.3 文件写入

写文件和读文件是一样的,唯一的区别是在调用open方法时,传入标识符'w'或者'wb'。

write()方法和read()方法对应,是将字符串写入到文件中。write()方法不用写换行符/n。

writelines()方法和readlines()方法对应,也是针对列表的操作。它接收一个字符串列表作为参数,将他们写入到文件中,换行符不会自动的加入,因此,需要显式的加入换行符。

2 操作文件和目录

OS模块提供了访问操作系统服务和操作文件目录的功能。

2.1 OS操作文件目录

获得当前Python脚本工作的目录路径:os.getcwd()。
返回指定目录下的所有文件和目录名:os.listdir()。os.listdir("C:\l"")
删除一个文件:os.remove(filepath)。
删除多个空目录:os.removedirs(r"d:\python")。
检验给出的路径是否是一个文件:os.path.isfile(filepath)
检验给出的路径是否是一个目录:os.path.isdir(filepath)。
判断是否是绝对路径:os.path.isabs()。
检验路径是否真的存在:os.path.exists)。
分离一个路径的目录名和文件名:os.path.split()。
分离扩展名: os.path.splitext()。
获取路径名: os.path.dirname(filetpah)。
获取文件名: os.path.basename(filepath)。
重命名文件或者目录:os.rename(old,new)。
重命名文件或者目录:os.rename(old,new)。
创建多级目录:os.makedirs(r"c:\python\test")。
创建单个目录:os.mkdir("test")。
获取文件属性:os.stat(file)。
修改文件权限与时间戳: os.chmod(file)。
获取文件大小:os.path.getsize(filename)。
删除目录: os.rmdir("dir"),只能删除空目录;
         shutil.rmtree("dir"),空目录、有内容的目录都可以删。

2.2 OS操作系统服务

os.sep —————————————————可以取代操作系统特定的路径分隔符。windows下为 “\\”
os.name ————————————————正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。
os.getcwd()—————————————函数得到当前工作目录,即当前Python脚本工作的目录路径。
os.getenv()—————————————获取一个环境变量,如果没有返回none
os.putenv(key, value)———设置一个环境变量值
os.system(command)——————函数用来运行shell命令。
os.linesep——————————————给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。

3 序列化操作

程序运行时,所有变量都在内存中,程序一结束或意外中断,程序中的内存变量都会被操作系统进行回收。

把内存中的变量变成可存储或可传输的过程,就是序列化;把变量内容从序列化的对象重新读取到内存,就是反序列化。

在Python中提供了两个模块:cPickle和 pickle来实现序列化:

try:
    import cPickle as pickle
except ImportError :
    import pickle

d = dict (url= 'index.html ' ,title='首页', content='首页')
f = pickle.dumps(d)#dumps方法可以将任意对象序列化成str
print(f)
v = pickle.loads(f)
print(v)


#使用dump方法,可以将序列化后的对象直接写入文件中
f=open (r'E:\dump.txt','wb ')
pickle.dump(d,f)
f.close()

f=open (r'E:\idump.txt','rb')
d=pickle.load(f)
f.close ( )

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值