gpt4 book ai didi

python - 读入格式化行以填充数组

转载 作者:太空宇宙 更新时间:2023-11-03 20:47:42 25 4
gpt4 key购买 nike

我正在尝试使用 python 将 txt 文件中的一定数量的行读取到数组中。 txt 文件采用 FORTRAN 格式,包含 3 个整数,其中两个为 3 个字符长度,另一个为 2 个字符长度(即 24238 8,其中值为 24,238, 8)。每行有 7 3 个整数“组”。下面是 txt 文件的 8 行。

24238 8. 27237 8. 38 82 6. 38 96 6. 39 76 6. 39 77 6. 39 78 6.BARR  1
39 79 6. 39 80 6. 39 81 6. 39 82 6. 39 84 6. 39 85 6. 39 86 6.BARR 2
39 88 8. 39 89 8. 39 9010. 39 91 7. 39 92 7. 39 93 5. 39 96 6.BARR 3
39 9710. 39 9810. 39 9910. 3910010. 3910113. 3910212. 3910312.BARR 4
3910412. 3910512. 40 72 6. 40 73 6. 40 74 6. 40 75 6. 40 76 6.BARR 5
40 80 9. 40 8110. 40 8212. 40 8312. 40 84 8. 4010512. 4010612.BARR 6
40107 9. 40108 9. 40109 9. 41 70 6. 41 71 6. 41 77 6. 41 78 6.BARR 7
41 79 8. 41 80 8. 4110910. 41110 6. 41111 6. 41184 8. 42 73 2.BARR 8

我也不想担心每行末尾的 BARR 1 等,它可以被忽略。我创建了一个初始值数组,我希望用 txt 文件中的值填充该数组。

import numpy as np
basin = open("il3_barrier","r")
zbm = np.full((171,251),-300)

我想要的是三个“组”中的第三个值根据第一个和第二个值填充数组。例如,我希望值 8 占据数组的位置 24、238 等。

我正在使用 stackoverflow 上另一个答案中的一段代码。但我不确定如何使用它循环遍历行。

def slices(s, *args):
position = 0
for length in args:
yield s[position:position + length]
position += length

对于这个仅查看 8 行的示例,我将尝试如下所示的操作:

for h in range(0,8): 
tempLine = basin.readline()
for k in range(0,7):
inw,jnw,hw = list(slices(tempLine,3,3,2))
inw = int(inw)
jnw = int(jnw)
zbm [inw,jnw] = hw

这仅返回每行的第一组值,并且不会循环整行。有没有办法让它在一行中循环遍历每组数字?或者也许有另一种方法?

最佳答案

给你=^..^=

代码中的简短描述。

import numpy as np

# load raw data
raw_data = []
with open('raw_data.txt', 'r') as file:
data = file.readlines()
for item in data:
raw_data.append(item.strip())

# collect coordinates data
coordinates_data = []
for item in raw_data:
for i in range(0, 63, 9):
coordinates_data.append((item[0+i:2+i].strip(), item[2+i:5+i].strip(), item[6+i:7+i].strip().replace('.', '')))

# get values for array size
max_x = 0
max_y = 0
for item in coordinates_data:
if max_x < int(item[0]):
max_x = int(item[0])
if max_y < int(item[1]):
max_y = int(item[1])

# create empty array
final_array = np.zeros((max_x+1, max_y+1))

# load data into array
for item in coordinates_data:
final_array[int(item[0]), int(item[1])] = int(item[2])

关于python - 读入格式化行以填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56464992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com