我有一个关于为重复的值集添加某种索引的可能性的问题。我有一个CSV文件,其中包含数百个钻孔的地质剖面图。每个地质层都有自己的数字代码,例如砂岩 - 24.有时钻孔重复自己。在我的结果文件中,我需要X和Y,底层值,图层厚度和图层的数字代码。如果我的轮廓/钻孔中有两层或多层相同的岩性,它们应该有某种指数(24.1或24.a; 24.2 / 24.b ......)。我无法找到在Stackoverflow上创建此索引的方法,这就是为什么我要求你的帮助。我的代码如下所示:
with open('GeoPrz_WYNIKI.csv', newline='') as file:
file = csv.reader(file, delimiter=';', quotechar='|')
measurements = list(file)
transf = []
last_xyz = None
for x, y, glub, idnazw, strop, grub, seria in measurements:
strop = float(strop)
grub = float(grub)
spag = float(format((strop + grub), ".2f"))
for line in measurements:
xyz = x, y, spag
if xyz == last_xyz:
continue
if True:
last_xyz = xyz
transf.append([x, y, spag, seria])
输出如下:
347591.91 301467.92 19.78 1
347591.91 301467.92 106.06 24
347591.91 301467.92 118.68 25
347591.91 301467.92 120.08 24
347591.91 301467.92 274.3 27
所需的输出应如下所示:
347591.91 301467.92 19.78 1
347591.91 301467.92 106.06 24
347591.91 301467.92 118.68 25
347591.91 301467.92 120.08 24.1 (or 24a)
347591.91 301467.92 274.3 27
我真的很感谢你的帮助! 问候, 松。
答案 0 :(得分:1)
您可以随时创建一个查找/计数器地图,以便在再次遇到该值时使用,例如:
with open('GeoPrz_WYNIKI.csv', newline='') as f:
reader = csv.reader(f, delimiter=';', quotechar='|')
transf = [] # the output list
col_map = {} # lets use a dict for column lookup / counter
for row in reader: # loop through the CSV row by row
col_val = row[-1] # the value in the last column
if col_val in transf: # we already encountered this value
row[-1] = col_val + "." + transf[col_val] # append it with the counter
transf[col_val] += 1 # increase the counter
else:
transf[col_val] = 1 # create a counter for the next occurence
# process the rest of the row if needed here
# ...
transf.append(row) # add the (modified) row to the output list
当然,您可以根据需要解压缩和处理每个row
,包括使用与上一个不同的列 - 这只是一个与所呈现的数据格式匹配的通用解析器,并将修改最后一列值每次重复出现都会增加反击。