Python: 如何获得一致的列数?

Python: how to get consistent number of columns?

我正在创建自己的化学文件来训练神经网络。我想要以下格式:

C -0.56253228 0.3335121 0.31736381 # 原子及其三个笛卡尔坐标 x, y, z.

我希望每当我 select x,y,z 时,它都会对应于读取第 1、2 和 3 列。 但是当我尝试这样做时,它不起作用。每个原子(每一行)都有不同的形状! 如何使用 Python 删除所有这些额外的列 '[' ; ']\n' ? 当我尝试为不同的原子打印 x、y 和 z 时,您可以看到我的代码输出... P.S.: 我想将数字保持为浮点数!

谢谢!

for filename in os.listdir("."):
    if filename.startswith ("NN") and filename.endswith(".xyz"):
  
        with open(filename) as f:
            for i, line in enumerate(f):

                if i > 2 and i < na: #na is number of atoms in the molecule

                    X = line.split(" ")
                    X= np.array(X)
                    print(X.shape)
                    X_no_empty_strings = []
                    X_no_newline = []
                    print (X)
                    for string in X:
                        if (string != ""):
                            X_no_empty_strings.append(string)
                    
                    print ("edit1 complete", X_no_empty_strings)
                    print ("edit1 column x", X_no_empty_strings[0])
                    print ("edit1 column y", X_no_empty_strings[1])
                    print ("edit1 column z", X_no_empty_strings[2])

结果如下所示:

(5,)
['[-0.85038635' '' '0.68900173' '' '0.49302935]\n']
edit1 complete ['[-0.85038635', '0.68900173', '0.49302935]\n']
edit1 column x [-0.85038635
edit1 column y 0.68900173
edit1 column z 0.49302935]

(4,)
['[0.31778502' '1.5147795' '' '0.01285466]\n']
edit1 complete ['[0.31778502', '1.5147795', '0.01285466]\n']
edit1 column x [0.31778502
edit1 column y 1.5147795
edit1 column z 0.01285466]

(6,)
['[' '0.88690126' '' '0.70133678' '-1.0899707' ']\n']
edit1 complete ['[', '0.88690126', '0.70133678', '-1.0899707', ']\n']
edit1 column x [
edit1 column y 0.88690126
edit1 column z 0.70133678
(3,)
['[-1.47555639' '-0.21571745' '-0.60427323]\n']
edit1 complete ['[-1.47555639', '-0.21571745', '-0.60427323]\n']
edit1 column x [-1.47555639
edit1 column y -0.21571745
edit1 column z -0.60427323]

从输出来看,您的 .xyz 文件中的条目似乎包含方形制动器中的坐标。请 post 几行,这样可以更简单地测试代码。如果不是这种情况,请尝试更改此设置:

X = line.split(" ")
X = np.array(X)

对此:

X = line.strip().split()
X[0] = X[0][1:] # strip opening braket
X[-1] = X[-1][:-1] # strip closing braket
X = np.array(X, dtype=np.float32)