Python基础—with语法以及数据类型转换

文章介绍了Python中with语句用于文件操作的便捷性和安全性,以及如何使用eval和literal_eval进行数据类型转换。提到了eval的安全风险,并举例展示了如何通过literal_eval避免执行潜在的恶意代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、with语法

生成一个有学生成绩的csv文件

import csv
file = open('学生成绩.csv', 'w', encoding='utf-8')
myWrite = csv.writer(file)

col = ['姓名', '成绩']
myWrite.writerow(col)

# 文件读写完毕一定要关闭文件
file.close()

with语法,经常和open方法搭配使用

with:预定义的清理操作(当一个对象长期没有被使用时就会被清理)

with open('学生成绩2.csv', 'w', encoding='utf-8', newline='') as file_1:
	pass
	## open() as a 和 a = open()一样

只要with缩进中的代码执行完了,那么这个文件所占用的进程或线程就会被清理掉(可以理解为文件被关闭)

二、数据类型的转换

字符串类型的字典如何转回字典 —— 使用eval方法

eval方法:能够将字符串类型的任意数据、表达式转换为其原来的样子,让其具有原来的功能

str1 = '{"name":"张三"}'
print(str1, type(str1))

a = eval(str1)
print(a, type(a))

运行结果:{"name":"张三"} <class 'str'>
         {'name': '张三'} <class 'dict'>
b = eval(str(123))
print(b, type(b))
c = eval('1 + 2 + 3 + 4')
print(c, type(c))
d = eval('1 > 2')

运行结果:123 <class 'int'>
         10 <class 'int'>
         False <class 'bool'>

但是eval方法会涉及到安全问题,如果字符串中有恶意指令,那么eval方法会直将恶意指令执行

例如:(可见最后结果为乱码)

import os
os.system('ls')
str2 = "__import__('os').system('ls')"
print(eval(str2))

运行结果:'ls' �����ڲ����ⲿ���Ҳ���ǿ����еij���
              �����������
              1
              'ls' �����ڲ����ⲿ���Ҳ���ǿ����еij���
              �����������

literal_eval相对于eval方法,不会还原字符串类型的表达式

也就意味着,如果字符串中有恶意指令,不会去执行

import ast
a1 = ast.literal_eval('[1,2,3]')
print(a1, type(a1))

运行结果:[1, 2, 3] <class 'list'>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

㤅uu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值