详解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利用带权重随机数解决抽奖和游戏爆装备问题
Jun 16 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
Jan 20 Python
Python实现Youku视频批量下载功能
Mar 14 Python
python 移除字符串尾部的数字方法
Jul 17 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
Python基础之函数原理与应用实例详解
Jan 03 Python
Python sys模块常用方法解析
Feb 20 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
python实现网页录音效果
Oct 26 Python
selenium与xpath之获取指定位置的元素的实现
Jan 26 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
php htmlspecialchars加强版
2010/02/16 PHP
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
input 高级限制级用法
2009/03/26 Javascript
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
采用call方式实现js继承
2014/05/20 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
python 限制函数调用次数的实例讲解
2018/04/21 Python
python实现飞机大战
2018/09/11 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
会计学应届毕业生推荐信
2013/11/04 职场文书
适用于所有创业者的创业计划书
2014/02/05 职场文书
运动员获奖感言
2014/08/15 职场文书
面试自我评价范文
2014/09/17 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技
Python list列表删除元素的4种方法
2021/11/01 Python
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记