python - python结构化数组组合与转换
问题描述
我创建了一个脚本,该脚本将 .txt 文件中的大量数据以我想要的格式 [3:4:n] 收集到一个数组中,并且信息记录如下(我认为)。.txt 文件就是这种格式
1.000000e-01 1.000000e-01 1.000000e-01
1.000000e-01 2.000000e-01 3.000000e-01
3.000000e-01 2.000000e-01 1.000000e-01
1.000000e-01 2.000000e-01 4.000000e-01
并重复 N 次,我基本上从 4 行存储到 for 行(就像一个块),因为我正在处理来自 STL 部分的 ASCII 文件。
从这个意义上说,我有这个代码:
f = open("camaSTLfinalmente.txt","r")
b_line = 0
Coord = []
Normal = []
Vertice_coord = []
Tri = []
blook = []
for line in f:
line = line.rstrip()
if(line):
split = line.split()
for axis in range(0,3):
if(b_line == 0): #normal
Normal.append(split[axis])
else: #triangulo
Vertice_coord.append(split[axis])
if(b_line > 0):
Tri.append(Vertice_coord)
Vertice_coord = []
if(b_line == 3):
block.append(Normal)
block.append(Tri)
Coord.append(block)
block = []
Normal = []
Tri = []
b_line = 0
else:
b_line+=1
print(Coord[0]) #prints the follow line that I wrote after the code
信息存储方式为: [['1.000000e-01', '1.000000e-01', '1.000000e-01'], [['1.000000e-01', '2.000000e-01', '3.000000 e-01'],['3.000000e-01','2.000000e-01','1.000000e-01'],['1.000000e-01','2.000000e-01','-4.000000e-01 ']]]
有什么办法可以简化吗?
借这个机会问一下:我想把这个信息转换成数字,理想的情况是读取指数(e)后面的数字,并相应地改变数字,即1.000000e-01变为0 ,1(为了使用类似的数组进行操作,我在其中存储来自另一个具有相同格式的 .txt 文件的信息)
谢谢关注,
佩德罗
解决方案
我不是 100% 确定我是否完全理解你想要的,但下面的代码会产生相同的结果Coord
:
coord = []
with open('camaSTLfinalmente.txt','r') as f:
content = [line.strip().split() for line in f]
for i in range(len(content)//4):
coord.append([content[4*i], content[(4*i+1):(4*i+4)]])
关于第二个问题,正如另一个答案中所说,处理包含数字的字符串的最简单方法是将它们转换为数字,然后将它们格式化为字符串。
s = '1.000000e-01'
n = float(s)
m = '{:.1f}'.format(n)
请参阅Python 文档中有关字符串格式的部分。
几点说明:
- 一般来说,Stackoverflow 不喜欢“我如何改进这段代码”形式的问题,尝试提出更具体的问题。
- 以上假设您的文件包含行,如果您在末尾留下一些不形成 4 包的行,请相应地
4k
更改整数除法。...//4
- 不要为变量使用大写字母。虽然风格指南不是强制性的,但遵循它们是一种很好的做法(查找 PEP-8,pylint,...)
推荐阅读
- laravel - Laravel 测试 | Laravel Artisan 命令中的模拟对象
- junit - 排除故障保护中的所有类别
- java - 如何设置动态填充的多级下拉框表单?
- angular - 通过量角器自动化上传文件时,UI 上出现“会话过期错误”。我正在使用“sendKeys”上传文件
- vba - 如何设置电子邮件的发送地址?
- ios - 故事板中的高度约束,用于具有动态高度的自定义视图
- php - 从 GOOGLE CHROME 访问网站时,访问者的信息未存储在数据库中
- laravel - Dropzone.js 请求在 Laravel 中为空
- code-snippets - 为什么我的代码片段代码不起作用?
- python-3.x - 尽管时区,datetime.now() 似乎是错误的