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()
    他们的区别在于前者输出一个文件流,而后者输出的是一个字符串。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

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