您的位置:首页技术文章
文章详情页

详解Python IO编程

【字号: 日期:2022-07-16 13:36:29浏览:2作者:猪猪
文件读写读文件

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’xffxd8xffxe1x00x18Exifx00x00...’ # 十六进制表示的字节写文件

写文件和读文件是一样的,唯一区别是调用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和BytesIOStringIO

在内存中读写str。

from io import StringIOf = 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 BytesIOf = BytesIO()f.write(’中文’.encode(’utf-8’)) # 写入的不是str,而是经过UTF-8编码的bytes。print(f.getvalue())f = BytesIO(b’xe4xb8xadxe6x96x87’)f.read() # b’xe4xb8xadxe6x96x87’操作文件和目录

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

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

import osos.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 -> rn linux/unix -> nprint(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 timeimport timefilepath = ’/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 编程
相关文章: