请问我整理的python脚本代码,执行出现资料交叉读取的问题请求协助指导修改

查看 6|回复 0
作者:ianlcc   
请问我整理的 python 脚本代码,执行出现资料交叉读取的问题,可否请协助指导一下应该要怎麼修改呢?
部份的腳本如下:
    for file_name in os.listdir(folder_path):
        if not file_name.lower().endswith('.csv') or file_name == "示范.csv":
            continue
        csv_path = os.path.join(folder_path, file_name)
        try:
            x, y, elevation = read_coordinates_from_csv(csv_path)
            borehole = self.g_i.borehole(x, y)
            borehole.Head.set(elevation)
            self.g_i.soillayer(0)
            self.g_i.Soillayers[0].Zones[0].Top.set(10)
            self.read_and_assign_soillayers(csv_path, 示范Data)
        except Exception as e:
            print(f"❌ 跳过 {file_name}:{e}")
    easygui.msgbox(msg='✅ 所有作业已自动建立完成。', title='完成')
def read_and_assign_soillayers(self, csv_path, 示范Data):
    with open(csv_path, 'r', encoding='utf-8-sig') as csv_file:
        csv_reader = csv.reader(csv_file)
        row_number = 1
        for row in csv_reader:
            if row_number == 5:
                self.g_i.Soillayers[0].Zones[0].Top.set(float(row[1]))
            if row_number > 6:
                if len(row[0].strip()) != 0:
                    bottomOfLayer = float(row[0])
                    layer = row[1].strip()
                    try:
                        spt = float(row[2])
                    except ValueError:
                        spt = 0
                    if row_number != 7:
                       self.g_i.soillayer(0)
                    self.g_i.Soillayers[row_number-7].Zones[0].Bottom.set(bottomOfLayer)
                    for material in 示范Data:
                        if material["Material"] == layer:
                            mat_name = layer
                            if checkIfNDependent(material):
                                mat_name += f" N = {truncate_float_to_one_decimal_point(spt)}"
                            existing_mat = next((m for m in self.g_i.Materials if m.Identification == mat_name), None)
                            if existing_mat:
                                self.g_i.Soillayers[row_number-7].Soil.Material = existing_mat
                            else:
                                new_mat = self.g_i.soilmat()
                                sm = int(parse示范Data(material["SM"], spt))
                                props = {
                                    "aaa": mat_name,
                                    "bbb": sm,
                                    "ccc": parse示范Data(material["c11"], spt),
                                    "ddd": parse示范Data(material["d11"], spt),
                                }
                                # 动态补上模型特有栏位
                                model_props = {
                                    1: {"w1": "w21", "w31": "w41"},
                                }
                                if sm in model_props:
                                    for plaxis_key, csv_key in model_props[sm].items():
                                        props[plaxis_key] = parse示范Data(material[csv_key], spt)
                                # 其他共通性渗透性处理
                                props["xx1"] = parse示范Data(material["k"], spt)
                                props["xx2"] = parse示范Data(material["k"], spt)
                                new_mat.setproperties(*[item for pair in props.items() for item in pair])
                                self.g_i.Soillayers[-1].Soil.Material = new_mat
            row_number += 1
def read_coordinates_from_csv(csv_path):
with open(csv_path, ‘r’, encoding=’utf-8-sig’) as csv_file:
reader = csv.reader(csv_file)
rows = list(reader)
x = float(rows[1][1])
y = float(rows[2][1])
elevation = float(rows[3][1])
return x, y, elevation
以上是我部份的代码,执行后发现出一点问题,读取的资料有交叉读取的现像
举例来说:
1、我是利用这个 pythond 脚本在「分析软体」中进行自动输入建立资料档的方式
2、所以在资料夹中共放了 3 个 csv 档要当作资料档读取。
3、执行这个脚本之后,脚本执行是成功建立资料档,但是资料档有交叉读取的现像。
4 、问题是:
①资料夹中有4 个 csv 档:示范.csv及1.csv、2.csv、3.csv,其中针对读取1.csv、2.csv、3.csv里面的资料建立时,好像发现有交叉混乱的现像
②1.csv 里面的资料应该是建立在同一个资料之中,以此类推…2.csv、3.csv 也是
③但是发现:
Ⓐ1.csv 档案中,栏位 B1B4 资料是建立在「分析软体」中 A 资料中(这个没有问题)
Ⓑ1.csv 档案中,栏位 B5、B7 后面,却是建立在「分析软体」中 B 资料中 (怎麼会变成建立在下一个资料档中)
Ⓒ2.csv 档案中,栏位 B1B4 资料是建立在「分析软体」中 B 资料中(这个没有问题)
Ⓓ2.csv 档案中,栏位 B5、B7 后面,却是建立在「分析软体」中 C 资料中 (怎麼会变成建立在下一个资料档中)
Ⓔ3.csv 档案中,栏位 B1B4 资料是建立在「分析软体」中 C 资料中(这个没有问题)
Ⓓ3.csv 档案中,栏位 B5、B7 后面,却是建立在「分析软体」中 A 资料中,因为资料夹只有 3 个 csv 档,所以变成循环建立在「分析软体」中 B 资料中(这个也是有问题)
5、请问前辈们,我上面这段脚本里是不是有哪里有写错?
https://pan.baidu.com/s/1sM7n9l7noL0ytOF2vfSd9g 提取?: xibh

资料, 软体

您需要登录后才可以回帖 登录 | 立即注册

返回顶部