详解Python IO编程


Posted in Python onJuly 24, 2020

文件读写

读文件

try:
 # windows下utf8
 f = open('./README.md', 'r', encoding='utf8', errors='ignore')
 print(f.read())
finally:
 f and f.close()


# 用with简化
with open('./README.md', 'r', encoding='utf8') as f:
 print(f.read())

# 迭代读取大文件
with open('./README.md', 'r', encoding='utf8') as f:
 # readline()可以每次读取一行内容
 for line in f.readlines():
  # 把末尾的'\n'删掉
  print(line.strip())
  
# 读取二进制文件
f = open('/Users/michael/test.jpg', 'rb')
f.read() # b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节

写文件

写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件

可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险

with open('./test2.md', 'a', encoding='utf8') as f:
 f.write('Hello, python!')
 
# 文件内字符替换,把你好替换为hi,然后读取内容到内存中
with open('test.txt','r') as f:
 s = f.readlines()
# 接着打开文件,用replace替换掉你内存中的内容,然后写入文件
with open('test.txt','w') as w:
 for i in s:
  w.write(i.replace('你好','hi'))

StringIO和BytesIO

StringIO

在内存中读写str。

from io import StringIO
f = StringIO()
f.write('hello')
f.write(' ')
f.write('world!')
print(f.getvalue()) # 方法用于获得写入后的str。

f = StringIO('Hello!\nHi!\nGoodbye!')
while True:
 s = f.readline()
 if(s == ''):
  break
 print(s.strip())

BytesIO

内存中读写bytes

from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8')) # 写入的不是str,而是经过UTF-8编码的bytes。
print(f.getvalue())

f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
f.read() # b'\xe4\xb8\xad\xe6\x96\x87'

操作文件和目录

import os
os.name # 如果是posix,说明系统是Linux、Unix或Mac OS X,如果是nt,就是Windows系统。
os.uname() # 注意uname()函数在Windows上不提供

环境变量

在操作系统中定义的环境变量,全部保存在os.environ这个变量中

import os
os.name
'nt'
os.environ # 获取环境变量
os.environ.get('PATH')
os.environ.get('x', 'default')

操作文件和目录

操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中

# 查看当前目录的绝对路径:
os.path.abspath('.')


# 当前的目录名
os.path.dirname(os.path.abspath(__file__))

# 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
os.path.join('/Users/michael', 'testdir') # '/Users/michael/testdir'

# 然后创建一个目录:
os.mkdir('/Users/michael/testdir')

# 删掉一个目录:
os.rmdir('/Users/michael/testdir')

# 路径拆分
os.path.split('/Users/michael/testdir/file.txt')

# 获得文件扩展名
os.path.splitext('/path/to/file.txt')

# 对文件重命名
os.rename('test.txt', 'test.py')

# 删掉文件
os.remove('test.py')


#OS模块

#os模块就是对操作系统进行操作,使用该模块必须先导入模块:
import os

#getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹)
result = os.getcwd()
print(result)

#chdir()改变当前工作目录
os.chdir('/home/sy')
result = os.getcwd()
print(result)

open('02.txt','w')

#操作时如果书写完整的路径则不需要考虑默认工作目录的问题,按照实际书写路径操作
open('/home/sy/下载/02.txt','w')

#listdir() 获取指定文件夹中所有内容的名称列表
result = os.listdir('/home/sy')
print(result)

#mkdir() 创建文件夹
#os.mkdir('girls')
#os.mkdir('boys',0o777)

#makedirs() 递归创建文件夹
#os.makedirs('/home/sy/a/b/c/d')

#rmdir() 删除空目录
#os.rmdir('girls')

#removedirs 递归删除文件夹 必须都是空目录
#os.removedirs('/home/sy/a/b/c/d')

#rename() 文件或文件夹重命名
#os.rename('/home/sy/a','/home/sy/alibaba'
#os.rename('02.txt','002.txt')

#stat() 获取文件或者文件夹的信息
#result = os.stat('/home/sy/PycharmProject/Python3/10.27/01.py)
#print(result)

#system() 执行系统命令(危险函数)
#result = os.system('ls -al') #获取隐藏文件
#print(result)

#环境变量
'''
环境变量就是一些命令的集合
操作系统的环境变量就是操作系统在执行系统命令时搜索命令的目录的集合
'''
#getenv() 获取系统的环境变量
result = os.getenv('PATH')
print(result.split(':'))

#putenv() 将一个目录添加到环境变量中(临时增加仅对当前脚本有效)
#os.putenv('PATH','/home/sy/下载')
#os.system('syls')

#exit() 退出终端的命令

#os模块中的常用值
#curdir 表示当前文件夹 .表示当前文件夹 一般情况下可以省略
print(os.curdir)

#pardir 表示上一层文件夹 ..表示上一层文件夹 不可省略!
print(os.pardir)

#os.mkdir('../../../man')#相对路径 从当前目录开始查找
#os.mkdir('/home/sy/man1')#绝对路径 从根目录开始查找

#name 获取代表操作系统的名称字符串
print(os.name) #posix -> linux或者unix系统 nt -> window系统

#sep 获取系统路径间隔符号 window ->\ linux ->/
print(os.sep)

#extsep 获取文件名称和后缀之间的间隔符号 window & linux -> .
print(os.extsep)

#linesep 获取操作系统的换行符号 window -> \r\n linux/unix -> \n
print(repr(os.linesep))

#导入os模块
import os

#以下内容都是os.path子模块中的内容

#abspath() 将相对路径转化为绝对路径
path = './boys'#相对
result = os.path.abspath(path)
print(result)

#dirname() 获取完整路径当中的目录部分 & basename()获取完整路径当中的主体部分
path = '/home/sy/boys'
result = os.path.dirname(path)
print(result)

result = os.path.basename(path)
print(result)

#split() 将一个完整的路径切割成目录部分和主体部分
path = '/home/sy/boys'
result = os.path.split(path)
print(result)

#join() 将2个路径合并成一个
var1 = '/home/sy'
var2 = '000.py'
result = os.path.join(var1,var2)
print(result)

#splitext() 将一个路径切割成文件后缀和其他两个部分,主要用于获取文件的后缀
path = '/home/sy/000.py'
result = os.path.splitext(path)
print(result)

#getsize() 获取文件的大小
#path = '/home/sy/000.py'
#result = os.path.getsize(path)
#print(result)

#isfile() 检测是否是文件
path = '/home/sy/000.py'
result = os.path.isfile(path)
print(result)

#isdir() 检测是否是文件夹
result = os.path.isdir(path)
print(result)

#islink() 检测是否是链接
path = '/initrd.img.old'
result = os.path.islink(path)
print(result)

#getctime() 获取文件的创建时间 get create time
#getmtime() 获取文件的修改时间 get modify time
#getatime() 获取文件的访问时间 get active time

import time

filepath = '/home/sy/下载/chls'

result = os.path.getctime(filepath)
print(time.ctime(result))

result = os.path.getmtime(filepath)
print(time.ctime(result))

result = os.path.getatime(filepath)
print(time.ctime(result))

#exists() 检测某个路径是否真实存在
filepath = '/home/sy/下载/chls'
result = os.path.exists(filepath)
print(result)

#isabs() 检测一个路径是否是绝对路径
path = '/boys'
result = os.path.isabs(path)
print(result)

#samefile() 检测2个路径是否是同一个文件
path1 = '/home/sy/下载/001'
path2 = '../../../下载/001'
result = os.path.samefile(path1,path2)
print(result)


#os.environ 用于获取和设置系统环境变量的内置值
import os
#获取系统环境变量 getenv() 效果
print(os.environ['PATH'])

#设置系统环境变量 putenv()
os.environ['PATH'] += ':/home/sy/下载'
os.system('chls')


# 列出当前目录文件名
[x for x in os.listdir('.') if os.path.isdir(x)]

# 列出所有的.py文件
[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']


# walk返回:tupple(dirpath:路径, dirnames:该路径下面的目录list, filenames: 该路径下面的文件list)
for fpathe,dirs,fs in os.walk(path): 
 for f in fs: 
  print(os.path.join(fpathe,f))

注意: 不用通过直接拼接字符串的方式,来拆分路径。这样可以正确处理不同操作系统的路径分隔符;

以上就是详解Python IO编程的详细内容,更多关于Python IO编程的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
pandas修改DataFrame列名的方法
Apr 08 Python
对python中的xlsxwriter库简单分析
May 04 Python
python实现AES和RSA加解密的方法
Mar 28 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
Aug 23 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 Python
Python如何把多个PDF文件合并代码实例
Feb 13 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
Python中的With语句的使用及原理
Jul 29 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 #Python
基于opencv的selenium滑动验证码的实现
Jul 24 #Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 #Python
python定义类的简单用法
Jul 24 #Python
Python爬虫抓取指定网页图片代码实例
Jul 24 #Python
详解Flask前后端分离项目案例
Jul 24 #Python
通过实例了解Python异常处理机制底层实现
Jul 23 #Python
You might like
怎么使 Mysql 数据同步
2006/10/09 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
自己开发Dojo的建议框架
2008/09/24 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
jQuery 监控键盘一段时间没输入
2016/04/22 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
Python中super的用法实例
2015/05/28 Python
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
在keras中实现查看其训练loss值
2020/06/16 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
小学美术教学反思
2014/02/01 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
2014年教师节寄语
2014/04/03 职场文书
贷款委托书
2014/08/01 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
公务员检讨书
2014/11/01 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
学雷锋感言
2015/08/03 职场文书
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript