最近在用Python,做一个小脚本,有个操作就是要读取文本框中的内容然后将其转换成数组对象再进行相关操作。但读取到的文本是字符串类型的,所以,得进行一波小操作了嘿。
下面是获取用tkinter包创建的文本框中所有内容的函数:
text = win_Text1.get('0.0', 'end') # 获取文本框所有内容
print(text)
这是读取指定路径下文本文件内容的方式:
f = open("D:/tmp/num.txt")
print(f.read())
两者输出都是整个内容的一个字符串数据:
1 2 3
4 5 6
7 8 9
开始操作:
首先,根据换行符对字符内容进行分隔,得到一个列表对象:
p = text.split('\n')
print(p)
'''输出:
['1 2 3', '4 5 6', '7 8 9']'''
但是列表里存储的也还是字符串元素,继续操作既然有多个元素,那就用循环各个进行操作:
matrix = [] # 定义一个列表对象
for i in range(len(p)):
p1 = p[i].split(' ') # 将列表中每一块的的数字按空格进一步切分成列表
intp1 = [int(x) for x in p1] # 使用列表推导试将字符串转换为数字
# intp1 = list(map(int, p1)) # 方法2 使用map做映射转换为数字
matrix.append(intp1) # 将转换后的数字列表追加存入列表
print(matrix)
'''输出:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]'''
成功转换成一个数字类型的列表。
既然列表有了,那数组就简单了,直接用numpy包的arrray方法生成数组对象。
a = np.array(matrix)
print(a)
'''输出:
[[1 2 3]
[4 5 6]
[7 8 9]]'''
好了 以上就是我的转换思路,即,字符串→字符串列表→数字列表→数组(矩阵)
但是,我的最终目的是得到数组(矩阵)对象,中间的过程是不是可以省略了?好料,后面我真发现了一个函数,可以将字符串直接转换成数组(矩阵)。如下:
f = open("D:/tmp/num.txt")
text = f.read()
p = text.replace('\n', ';')
a = np.mat(p)
print(a)
'''输出:
[[1 2 3]
[4 5 6]
[7 8 9]]'''
对就是用numpy包中的mat()方法,按分号和空格将字符串转换成数组,这样就可以省去好的行代码了。
虽然方法好用 但是自己思考进行转换设计不更有趣嘿
勤学勤练勤思考,天天向上少不了!