首页 > 解决方案 > 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 文件的信息)

谢谢关注,

佩德罗

标签: pythonarraysoperatorscoordinate-transformationsimplify

解决方案


我不是 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,...)

推荐阅读