博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 查询文本文件的层次
阅读量:7223 次
发布时间:2019-06-29

本文共 1377 字,大约阅读时间需要 4 分钟。

I/O系统有一系列的层次构建而成

下面是操作一个文本文件的例子来查看这种层次

>>> f = open('sample.txt','w')>>> f<_io.TextIOWrapper name='sample.txt' mode='w' encoding='UTF-8'>>>> f.buffer<_io.BufferedWriter name='sample.txt'>>>> f.buffer.raw<_io.FileIO name='sample.txt' mode='wb'>>>>

io.TextIOWrapper 是一个编码和解码Unicode 的文本处理层,io.BufferedWriter 是一个处理二进制数据的带缓冲的I/O 层,io.FileIO 是一个表示操作系统底层文件描述符的原始文件,增加或改变文本编码会涉及增加或改变最上面的io.TextIOWrapper 层

一般来讲,像上面例子这样通过访问属性值来直接操作不同的层是很不安全的,如果你试着使用下面这样的技术改变编码看看会发生什么

>>> f<_io.TextIOWrapper name='sample.txt' mode='w' encoding='UTF-8'>>>> f = io.TextIOWrapper(f.buffer, encoding='latin-1')>>> f<_io.TextIOWrapper name='sample.txt' encoding='latin-1'>>>> f.write('Hello')Traceback (most recent call last):File "
", line 1, in
ValueError: I/O operation on closed file.>>>

 结果出错了,因为f 的原始值已经被破坏了并关闭了底层的文件,

 

detach() 方法会断开文件的最顶层并返回第二层,之后最顶层就没什么用了

>>> f = open('sample.txt', 'w')>>> f<_io.TextIOWrapper name='sample.txt' mode='w' encoding='UTF-8'>>>> b = f.detach()>>> b<_io.BufferedWriter name='sample.txt'>>>> f.write('hello')Traceback (most recent call last):File "
", line 1, in
ValueError:underlying buffer has been detached

 一旦断开最顶层后,你就可以给返回结果添加一个新的最顶层

>>> f = io.TextIOWrapper(b, encoding='latin-1')>>> f<_io.TextIOWrapper name='sample.txt' encoding='latin-1'>>>>

 

转载于:https://www.cnblogs.com/baxianhua/p/10244548.html

你可能感兴趣的文章
猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
查看>>
面试题:给你个id,去拿到name,多叉树遍历
查看>>
go append函数以及写入
查看>>
关于Java中分层中遇到的一些问题
查看>>
配置 PM2 实现代码自动发布
查看>>
android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
查看>>
iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
查看>>
诡异!React stopPropagation失灵
查看>>
Python_OOP
查看>>
个人博客开发系列:评论功能之GitHub账号OAuth授权
查看>>
mongodb--安装和初步使用教程
查看>>
ES6简单总结(搭配简单的讲解和小案例)
查看>>
text-decoration与color属性
查看>>
如何使用Mybatis第三方插件--PageHelper实现分页操作
查看>>
PyCharm搭建GO开发环境(GO语言学习第1课)
查看>>
Android交互
查看>>
提醒我喝水chrome插件开发指南
查看>>
列表数据转树形数据
查看>>
Java新版本的开发已正式进入轨道,版本号18.3
查看>>
从零开始的webpack生活-0x009:FilesLoader装载文件
查看>>