继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python IO编程

慕神8447489
关注TA
已关注
手记 1134
粉丝 172
获赞 955

1. 打开文件

f = open(filename,mode)

mode功能
'r'
“w'
'a'追加
'b'二进制模式(添加到前三个模式中)除了纯文本外都应该用这个模式
'+'读/写模式(添加到前三个模式种)
  • 'r','r+'模式下,文件必须存在,否则报错。而'w' 'a' 模式下文件不存在会新建文件,若存在文件,'w'模式会把原来的文件清空,'a'则追加在源文件末尾。

  • 对于小文件来说,可以直接用 f.read()来读取所有的字。

  • 对于大文件来说,可能一次性读取很大文件的时候,内存不够,我们可以连续调用f.read(size)来指定读取的字符数。例如:

part = f.read(5000)    #一次读取5000字节while part:    print(part)
    part = f.read(5000)
  • 更好的方式:

with open(filename, 'rb') as f:    for line in f:        <do something with the line>

对可迭代对象 f,进行迭代遍历:for line in f,会自动地使用缓冲IO(buffered IO)以及内存管理,而不必担心任何大文件的问题。

  • 对于文本文件,最好就是用readlines()方法来一行一行读取。

with open(path,'r') as f:    for line in f.readlines():
        print(line.strip())    # str.strip()用于去除结尾处的'\n'
  • 由于文件通常要用f.close()来关闭,有时候出现异常的时候.close()就无法调用。所以一般采用with open(path,mode) as f:表示try...finally的结构。建议都采用with open() as f:来打开文件

  • 可以用f.seek(0)方法让指针回到文件初始位置。

2. 操作文件。

  • 常常需要 import os,shutil

  • 获取当前工作目录: os.getcwd()

  • 获取指定目录下的文件和目录名字: os.listdir() 不传入参数则获取工作目录下的文件。

  • 文件删除:os.remove(path) ——删除path的文件, os.rmdir(path)——删除空文件夹。shutil.rmtree(path) —— 删除一个文件夹以及其所有的文件。注意这种方式会直接删除文件不进入回收站。
    安全删除:用第三方的send2trash库 —— send2trash.send2trash()—— 把文件丢进垃圾箱。

  • 创建目录:单个目录 os.mkdir('test') ; 多级目录 os.makedirs(r'python\test')

  • 获取文件大小: os.path.getsize(filename)

  • 文件复制:shutil.copy(from,to) —— 复制单个文件,to可以是一个文件夹名字也可以是文件的新名字;
    shutil.copytree(from,to)———复制复制一个文件树(非空文件夹全部复制过去)路径都是文件夹的名字。

  • 文件移动:shutil.move(from,to) 'to'是一个文件夹或文件新名字。

  • os.path.split() 可以分离最后一击的目录或文件; os.path.splitext()可以直接分离出来文件扩展名,很方便。

>> os.path.split('/Users/chen/testdir/file.txt')
('/Users/chen/testdir', 'file.txt')>>> os.path.splitext('/path/to/file.txt')
('/path/to/file', '.txt')

3.序列化

  • 序列化:把程序运行过程中产生的变量变成可以储存或传输的内容;
    反序列化,把数据序列化的内容重新读取到内容中。

  • pickle为python特有的序列化模块,但是并不通用,用json更好。

  • 建立字典: d = dict (a='xxx',b='xxx',c='xxx')

JSON ——表示出来就是一个字符串,很方便读写。

JSON类型Python类型
{}dict
[]list
"string"str
123.456int or float
true/falseTrue/False
nullNone
  • 内置的json模块可以实现python对象和JSON格式的互相转换。

  • json.dumps()进行序列化

d = dict(name = 'Jane', age=20,score=88)>> {'age': 20, 'name': 'bob', 'score': 88}
json.dumps(d)>> '{"name": "bob", "age": 20, "score": 88}'
  • json.loads(json_str) 反序列化

c = json.dumps(d)
json.loads(c)>> {'age': 20, 'name': 'bob', 'score': 88}

然后再把 json.dumps(d) 通过文件读写的方式写在本地或者传输到别的地方去。

  • 参数:intdent(缩进)——默认为0,这样打印出来的只有一行,不好看,一般写indent=4
    ensure_ascii——默认为True,若内容包含非ASCII的字符(比如中文),会出现'\uXXXX',设置为ensure_ascii=False就可以正常显示了。

  • json.dump()json.dumps()
    他们的区别在于前者输出一个文件流,而后者输出的是一个字符串。



作者:chenweifeng
链接:https://www.jianshu.com/p/7a6c29127a26


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP