Python IO编程

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.456 int or float
true/false True/False
null None
  • 内置的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()
    他们的区别在于前者输出一个文件流,而后者输出的是一个字符串。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本系列主要学习Python的基本使用和语法知识,后续可能会围绕着AI学习展开。Python3 (1) Python...
    猿来如痴阅读 5,854评论 0 1
  • 文件读写操作 with保证了读取文件就算异常也会自动调用了文件对象的close( )方法。标识符:‘r’表示读'r...
    小船翻不翻阅读 1,820评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,292评论 19 139
  • IO编程概念 IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由C...
    时间之友阅读 3,971评论 0 0
  • 本文估计会得罪《美国众神》的粉丝——因为我把这本书归于“鬼才知道他在说什么”系列。 在写本文之前,我和朋友热烈地讨...
    丁零penny阅读 4,073评论 2 0