python结构化数组的组合与转换

2024-04-19 20:23:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个脚本,它以我想要的[3:4:n]格式将一个.txt文件中的大量数据收集到一个数组中,并将信息记录如下(我想)。.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

信息以以下方式存储: ['100000E-01','100000E-01','100000E-01','100000E-01',['100000E-01','200000E-01','3000E-01','3000E-01','200000E-01','100000E-01','100000E-01','100000E-01','100000E-01','40000E-01']]

有什么办法可以简化它吗

我想借此机会问一下:我想将这些信息转换成数字,理想的做法是读取指数(e)后的数字,并相应地更改数字,即1.000000e-01变为0,1(为了使用类似的数组进行操作,我在其中存储另一个.txt文件中相同格式的信息)

谢谢大家的关注

佩德罗


Tags: 文件txt信息forif格式lineblock
2条回答

您可以尝试将行split = line.split()更改为:

split = [float(x) for x in line.split()]

如果需要结果为字符串而不是浮点数据类型:

split = [str(float(x)) for x in line.split()]

我不能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)

请参阅关于string formatting in the Python doc的部分

几句话:

  • 一般来说,Stackoverflow不喜欢“如何改进这段代码”这样的问题,试着问一些更具体的问题
  • 以上假设您的文件包含4k行,如果您的末尾还有一些行没有形成4行的包,则相应地更改整除...//4
  • 不要对变量使用大写字母。虽然样式指南不是强制性的,但遵循它们是一种很好的做法(查阅PEP-8、pylint等)

相关问题 更多 >