Python基础学习Day_06

引言

        今天学习的是文件的IO流和异常处理,和java有点类似,我好像是找到家了的感觉。现在是23点30,我们开始今天的博客之旅吧!

一.IO流

1.文件读取操作    open(file,mode='r',encoding=None)

这个函数里面参数很多,我就写了三个常用参数

file:读取的文件

mode:权限,分为只读r,只写w,追加a,二进制读写b,所以常用的权限有,‘a','r','w','ab','rb','wb'

encoding: 编码格式,常用utf-8

用完需要用close()方法关闭io流

返回值是一个文件对象

file_obj = open("info.txt", mode="r")
print(file_obj)
file_obj.close()

#<_io.TextIOWrapper name='info.txt' mode='r' encoding='cp936'>

2.读取文件对象的值    read(file_obj)

file_obj上上面方法的返回值,文件读取对象

file_obj = open("info.txt", mode="r")
print(file_obj)
data = file_obj.read()
print(data)

# aabbccddaabbccdd
# 1212121212
# 3433434343
# 565656656

3.写入文件对象的值     write(file)

old_txt = "info.txt"
old_img = r"C:\Users\32979\Pictures\猫羽雫 蓝色眼睛女子 尾巴 女孩子 猫耳.jpg"

#读取操作
img1 = open(old_img, mode="rb")  #可以进行读
content = img1.read()
print(content)



#写入操作
img1.close()

#targe参数是目标文件,也就是需要写入的文件
#’wb'参数是用二进制写入,如果没有targe这个文件夹,不会报错,会自己创建
img2 = open("pycharm.webp",mode="wb")

#write参数必须是读取出来的对象
img2.write(content)
img2.close()

4.文件追加时,重新定位光标  seek()

f = open("info.txt",mode = "a+") 
# a只具有追加功能,不能读取 。王三,将其在张五中间。a+追加的基础上可以读的操作
# # 一个unicode汉字2个字节。如果是utf-8 一个汉字3个字节。gbk占两个字节
f.write("aabbccdd")
#   # 光标,又称为游标

f.seek(0)
data = f.read()
print(data)

5.csv文件操作

1.认识csv文件

csv文件类似于excel中的表,或者说列表。第一行是标题头,下面的都是各个标题所对应的值。

下面是一个csv文件

name,age,weight
aa,20,30
bb,20,40
cc,30,28

2.csv读取文件     DictReader()

参数是需要读取的csv文件,返回值是一个迭代器,因为csv是一个列表,读取以后他会把标题头当作键值,每一行数据当作值,封装成一个字典,每一行一个字典,所以返回值是一个迭代器对象,显示数据的话需要迭代

with open("test.csv","r") as file:
    read = csv.DictReader(file)
    print(read)
    for i in read:
        print(i)

# {'姓名': 'aa', '年龄': '20', '成绩': '30'}
# {'姓名': 'bb', '年龄': '20', '成绩': '40'}
# {'姓名': 'cc', '年龄': '30', '成绩': '28'}

3.csv写入操作   DictWrite() writeHeader() writerows()

import csv

# 假设我们要写入CSV文件的列名
fieldnames = ['name', 'age', 'city']

# 打开一个文件用于写入(如果文件已存在,则会被覆盖)
with open('example.csv', 'w', newline='') as csvfile:
    # 创建一个csv.DictWriter对象,指定要写入的文件对象和列名
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    # 写入一行表头(列名)
    writer.writeheader()

    # 写入一些数据行
    writer.writerow({'name': 'Alice', 'age': 24, 'city': 'New York'})
    writer.writerow({'name': 'Bob', 'age': 27, 'city': 'Los Angeles'})

    # 或者,你可以一次性写入多行数据(作为一个字典列表)
    rows = [
        {'name': 'Charlie', 'age': 22, 'city': 'Chicago'},
        {'name': 'David', 'age': 30, 'city': 'Boston'}
    ]
    writer.writerows(rows)

6.xml文件操作

# 导入ElementTree包
from xml.etree import ElementTree as ET

# 先使用et生成et 文件
tree = ET.parse("data.xml")

# tree.getroot 获取根目录的标签。 根目录的标签地址
# 可以用对象来获取相关的值,两个方法都可以
root = tree.getroot() 
# root = ET.XML(connt)

# 一旦得到root对象,对立面的值进行读取
country_obj = root.find("country")
print(country_obj)

# 对象来获取里面的相关内容
print(country_obj.tag)
# 标签内的名字
print(country_obj.attrib)

7.json文件操作

json文件类似python中的字典类型。{“key”:“value”}

1.json文件写入操作    dump(python数据,写入的目标json文件)

import json
data = {"aaa4444":"1235664"}

f = open("stu.json","w") # 写一个文件,控制文件权限

# 将python转化为json 进行写入f
json.dump(data,f)
f.close()

2.json文件读取操作

with open("stu.json","r") as f:
    print(f.read()) 

8.with...as上下文管理器

使用这个上下文管理器的话不用关闭IO流了

with open('stu.json','w') as f:
    # json.dump(data,f)
    f.write(json.dump(data))

二.异常

当程序被逼停,但后面的内容还要运行。处理掉

异常的处理:

  1. 直接是控制台抛出
  2. 捕获异常

第一种情况

​try:
    程序正常运行的代码块
except:
    执行抛出异常的代码块
​

第二种情况

try -except -else:
如果抛出异常执行的except的内部代码块。
如果程序正常,正常执行else里面的代码块。
在实际开发中,遇到一道,抛出继续。
主动触发异常格式:
raise 异常

第三种情况

assert断言 报错是(AssertionError)
用于判断一个表达式,当表达式为false时,自动触发断言异常

结语

        现在是北京时间00:20,虽然内容很少,但是还是花了50分钟整理,因为我觉得csv这个文件格式在后面爬虫的时候遇到挺多的,所以多看了一下,今天是python初学者,梦想是做月入过万的数据分析师或者爬虫工程师,mai起!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值