Python基础(十三)IO

前言

IO就是输入流和输出流,概念在java里写过了不写了。
在py中io操作那真是相当的简单,回想起java的io那真是太痛苦了,哈哈。

介绍

文件读写(字符流)

关于文件可以直接操作字节流和字符流了。
先通过open函数以不同模式打开文件对象,默认是只读模式’r’,在本案例中是读取了文件全部内容。

# 读取文件中的内容(字符)
try:
    f = open("c:/aaa.txt", 'r')
    print(f.read())
except IOError as e:
    print(e)
finally:
    f.close() # 最后关闭释放资源
'''
abcdefghijk
ad
fff
'''

也可以一行一行的读取(如读取配置文件的情况下)

try:
    f = open("c:/aaa.txt", 'r')

    while True:
        s = f.readline()
        if s == '':
            break
        print(s.strip())
except IOError as e:
    print(e)
finally:
    f.close()
'''
abcdefghijk
ad
fff
'''

因为io异常需要捕捉太麻烦了,可以用with as语句代替,并且不用写close方法了。
这里顺便介绍写东西到文件,只需要将读文件模式改为写模式:

# 只写模式(字符串)
with open("c:/aaa.txt", "w", encoding="gbk" ,errors='ignore') as f:
    f.write("aaa")

注意

  • 这里的’w’模式是覆盖的写,如果想要追加应该用’a’模式。
  • 文件的读写默认是utf-8格式,如果写入其他格式需要用encoding改写格式。
文件读写(字节流)

以上是将文本文件的内容通过字符流进行读写,但是如果是视频或图片之类的就需要字节流了,实际上字符流的本质也就是字节流,我们还是可以通过open函数完成字节流的读写的。

with open(r"C:\Users\Administrator\Pictures\tutu\java.png", "rb") as f:
    print(f.read())
# feJ\x8f\xc1\x83e\x87\x0f?\xa6>O?\xf9-\xcd2{\xf8\xb5\x98\xf7\xe6,代码太多不写了

b,就是byte,通过’rb’读取字节流的方式读取图片。注意:这里直接复制用的图片的路径所以记得使用转义字符。
再写一个案列,复制文件;当时写的时候我还想能不能r模式和w模式放在一起,结果自然是不行的啦!应该这样写:

with open("c:/aaa.txt", "rb") as f:
    with open("c:/ok.txt", "wb") as of:
        of.write(f.read())

StringIO、BytesIO

从内存中读写字符和字节;

from io import StringIO

f = StringIO()
f.write("aa")
f.write("ccc")
l = f.getvalue()
print(l)  # aaccc
f = StringIO(l) 
print(f.read()) # aaccc

在BytesIO中要写入字节,需要规定encode

from io import BytesIO, StringIO

f = BytesIO()
f.write("aa".encode("utf-8"))
l = f.getvalue()
print(l)  # b'aa'
f = BytesIO(l)
print(f.read())  # b'aa'
目录与文件

通过os和os.path模块我们可以操作文件和目录

import os
print(os.path.abspath('.'))  # 获取当前的绝对路径,如D:\workspace(python)\Test1\example
os.chdir("c:/") # 切换路径
print(os.listdir('.')) # 获取当前路径下的文件
print(os.path.isfile("c:/aaa.txt")) # 判断当前文件对象是否为文件,True
print(os.path.isdir("c:/aaa.txt")) # 判断当前文件是否为文件夹,False
l=os.path.join("c:/","/newdir")
print(l) # join拼接目录 #c:/newdir
os.mkdir(l) # 创建文件夹
os.rmdir(l) # 删除一个文件夹
os.rename("c:/aaa.txt","c:/abc.txt") # 重命名文件
os.remove("c:/ok.txt") # 删除文件

这里写一个遍历目录下所有文件的例子(非常简陋,也没非空判断)

# 遍历文件
def listFile(filepath):
    for x in os.listdir(filepath):
        if os.path.isfile(os.path.join(filepath, x)):
            print(x)
        else:
            listFile(os.path.join(filepath, x))


f = listFile(r"c:/aaa")

总结

py的IO相比java真是简单,os功能也好强大

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值