详解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实现随机密码字典生成器示例
Apr 09 Python
python tornado微信开发入门代码
Aug 24 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
numpy.random模块用法总结
May 27 Python
python生成随机红包的实例写法
Sep 02 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
简单了解python filter、map、reduce的区别
Jan 14 Python
python序列类型种类详解
Feb 26 Python
Python经典五人分鱼实例讲解
Jan 04 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 Python
Python Django搭建文件下载服务器的实现
May 10 Python
python调试工具Birdseye的使用教程
May 25 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
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
JS模拟多线程
2007/02/07 Javascript
JS 分号引起的一段调试问题
2009/06/18 Javascript
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
2013/06/27 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
自己使用总结Python程序代码片段
2015/06/02 Python
python制作最美应用的爬虫
2015/10/28 Python
git进行版本控制心得详谈
2017/12/10 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
Flask-Mail用法实例分析
2018/07/21 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
python3 下载网络图片代码实例
2019/08/27 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
农村婚庆司仪主持词
2014/03/15 职场文书
法院先进个人事迹材料
2014/05/04 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
学校教学管理制度
2015/08/06 职场文书
教师外出学习心得体会
2016/01/18 职场文书