码迷,mamicode.com
首页 > 编程语言 > 详细

python之IO操作

时间:2015-05-10 22:02:40      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

文件读写

在Python中,文件读写是通过open()函数打开的文件对象完成的。使用with语句操作文件IO是个好习惯。

try:
    f = open(1.txt, r)  #rb写二进制
    #f = open(‘1.txt‘, ‘w‘)  #wb读二进制
    f.read().decode(utf8)
    #f.write(‘test‘).encode(‘utf8‘)
finally:
    if f:
        f.close()

用with写:
with open(1.txt, r) as f:
    print f.read()

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便

 

目录操作

把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join()函数,这样可以正确处理不同操作系统的路径分隔符
同样的道理,要拆分路径时,也不要直接去拆字符串,而要通过os.path.split()函数,这样可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名

得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
返回指定目录下的所有文件和目录名:os.listdir()
检验给出的路径是否是一个文件:os.path.isfile()
检验给出的路径是否是一个目录:os.path.isdir()
判断是否是绝对路径:os.path.isabs()
检验给出的路径是否真地存:os.path.exists()
返回一个路径的目录名和文件名:os.path.split()      
分离扩展名:os.path.splitext()
获取路径名:os.path.dirname()
获取文件名:os.path.basename()
获取文件属性:os.stat(file)
给出当前平台使用的行终止符:os.linesep    Windows使用\r\n,Linux使用\n而Mac使用\r


创建空文件
os.mknod("test.txt")   
     
创建目录
os.mkdir("file")                   

复制文件
shutil.copyfile("oldfile","newfile")    #oldfile和newfile都只能是文件
shutil.copy("oldfile","newfile")        #oldfile只能是文件夹,newfile可以是文件,也可以是目标目录

复制文件夹
shutil.copytree("olddir","newdir")      #olddir和newdir都只能是目录,且newdir必须不存在

移动文件/目录
shutil.move("oldpos","newpos")   

重命名文件/目录
os.rename("oldname","newname")       

删除文件
os.remove("file")

删除目录
os.rmdir("dir")    #只能删除空目录
shutil.rmtree("dir")    #空目录、有内容的目录都可以删

转换目录
os.chdir("C:\\123")   #将当前目录设为 "C:\123", 相当于DOC命令的 CD C:\123 

 

file-like Object

像open()函数返回的这种有个read()方法的对象,在Python中统称为file-like Object。除了file外,还可以是内存的字节流,网络流,自定义流等等。file-like Object不要求从特定类继承,只要写个read()方法就行。

StringIO就是在内存中创建的file-like Object,常用作临时缓冲。

 

序列化

把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,例如JSON

JSON和Python内置的数据类型对应如下:

JSON类型 Python类型
{} dict
[] list
"string" ‘str‘或u‘unicode‘
1234.56 int或float
true/false True/False
null None

 

 

 

 

 

       

     

对于简单数据类型(string、unicode、int、float、list、tuple、dict),可以直接处理。

序列化
dumps()方法返回一个str,内容就是标准的JSON。
dump()方法可以直接把JSON写入一个file-like Object。

反序列化
loads()把JSON的字符串反序列化
load()从file-like Object中读取字符串并反序列化

>>> import json
>>> d = dict(name=David, age=20, score=100)
>>> d_encode = json.dumps(d)
>>> d_encode
{"age": 20, "score": 100, "name": "David"}
>>> with open(D:\\1.txt, wb) as f:
    d_encode_file = json.dump(d, f)

>>> d_decode = json.loads(d_encode)
>>> d_decode
{uage: 20, uscore: 100, uname: uDavid}
>>> with open(D:\\1.txt, rb) as f:
    d_decode_file = json.load(f)
   
>>> d_decode_file
{uage: 20, uscore: 100, uname: uDavid}

 

将class的实例对象encode,decode为json

import json

class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

def student2dict(std):
    return {
        name: std.name,
        age: std.age,
        score: std.score
    }

def dict2student(d):
    return Student(d[name], d[age], d[score])


s = Student(David, 20, 100)
print(json.dumps(s, default=student2dict))
#可选参数default就是把任意一个对象变成一个可序列为JSON的对象

json_str = {"age": 20, "score": 88, "name": "Bob"}
print(json.loads(json_str, object_hook=dict2student))
#loads()方法首先转换出一个dict对象,传入的object_hook函数负责把dict转换为Student实例

 

2015-05-10

python之IO操作

标签:

原文地址:http://www.cnblogs.com/whuyt/p/4492380.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!