python通过字符串执行语句(将文件读入变量,并用文件名作为变量名)

场景

通过python读取文件夹内全部的文件(全部为.npy格式),并将文件的名字作为变量名(如变量abc内存储文件abc.npy中的数据)

重要语句

exec()					# 可将字符串中的内容当作语句来执行
os.path.splitext()		# 将文件名和后缀分离
repr() 				# 可在执行字符串语句时保留‘’

实现

# 导入库
import numpy as np
import os
# 进入目标文件夹
os.chdir(r'...路径...')
file_list = os.listdir()		# 列出所有文件名
for i in np.arange(len(file_list)):
	# 将exec括号内的字符串当作语句来执行,repr()用于保留语句中的字符串
	exec(os.path.splitext(file_list[i])[0]+'= np.load('+repr(file_list[i])+',allow_pickle=True).item()')

注:repr()和str()都可以将其他格式的数据转化成字符串,但是此处不能用str(),因为在exec()执行字符串语句时会将文件名判断成变量,将后缀判断成属性。repr()能够实现类似字符串“嵌套”的功能。

以下是修改后的代码: ```python filename = input("请输入文件名:") content = input("请输入字符串(字节数大于7):") with open(filename, "w") as f: f.write(content) with open(filename, "r") as f: f.seek(7) print(f.read(5)) ``` 修改说明: 1. 原代码没有使用 with 语句来打开文件,在文件操作后也没有显式地关闭文件,这会导致文件句柄没有及时释放,可能会影响程序性能和稳定性。使用 with 语句可以自动关闭文件句柄,是更安全、更优雅的方式。 2. 原代码使用了 file 作为变量名,但 file 是 Python 内置函数,不应该被用作变量名,容易产生命名冲突。改用 f 作为变量名。 3. 原代码使用了 mode="r+" 参数来打开文件,但是这个模式会将文件指针移动到文件开头,如果不小心写入文件,就会覆盖文件的前面部分。因此,应该使用 mode="w" 参数来打开文件,以覆盖原有文件内容。 4. 原代码使用了 readlines() 方法来读取文件内容,但是这个方法会将整个文件读入内存,如果文件很大,就会导致内存占用过高。因此,应该使用 read() 方法来读取文件内容。 5. 原代码没有指定读取的起始位置,应该使用 seek() 方法将文件指针移动到第 8 个字节的位置。 6. 原代码使用了 readlines() 方法来读取文件内容,但是这个方法会返回一个字符串列表,而不是单个字符串。因此,应该使用 read() 方法来读取文件内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值