Python IO编程

作者: weifeng_genius | 来源:发表于2018-08-09 19:30 被阅读8次

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 IO编程

    1. 打开文件 f = open(filename,mode) 'r','r+'模式下,文件必须存在,否则报错。而...

  • Python IO编程

    一、文件读写 读 写 二、StringIO和BytestIO StringIO和BytesIO是在内存中操作str...

  • Python IO编程

    文件读写 读文件由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了...

  • Python:IO编程

    同步IO与异步IO:由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题。举个...

  • Python IO编程

    IO在计算机中指Input/Output,也就是输入和输出 同步和异步的区别就在于是否等待IO执行的结果。 文件读...

  • Python IO编程

    IO 在编程语言中特指输入和输出「即 input 和 output」。在 IO 编程中 stream (流)是一个...

  • python io 编程

    文件读写 读取文件 写文件 延展,非UTF-8编码的文本文件读写需要: 所有模式的定义及含义可以参考Python的...

  • Python IO编程

    IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的...

  • Python 流

    Python IO编程[https://cloud.tencent.com/developer/article/1...

  • Python 异步IO - asyncio

    python 异步IO 本文为个人学习python asyncio模块的内容,可以看为python异步编程的入门。...

网友评论

    本文标题:Python IO编程

    本文链接:https://www.haomeiwen.com/subject/flycbftx.html