Python函数单独运行有序,跨脚本调用输出无序的问题求助
问题分析与修复方案
嘿,我一眼就发现了问题的核心——代码缩进错误,这直接导致你的函数没有正确读取第12行及以后的所有数据,只处理了文件的最后一行!
错误原因拆解
你看原代码里,lines = row.strip()、columns = lines.split()以及if num > 11的逻辑块,都写在了for循环的外面。这意味着:
- 当
for循环遍历完整个文件后,才会执行这些代码 - 此时
row只保存了文件最后一行的内容,num也是最后一行的索引 - 所以你的A、B、C、D列表里只会有最后一行的数据,排序后自然还是这一行,单独运行时看起来“有序”
- 当在其他脚本调用时,若文件中第12行及以后有多个行,函数根本没把这些行全部读入,可能会让你误以为是排序失效,但本质是数据读取不完整
另外还有个小细节:enumerate默认从0开始计数,第12行对应的索引是11,所以如果要提取第12行及以后的数据,应该用num >= 11而非num > 11(后者会从第13行开始提取)。
修正后的代码
def read_file(my_file): import numpy as np A = [] B = [] C = [] D = [] with open(my_file) as f: for num, row in enumerate(f): # 跳过空行,避免split报错 stripped_row = row.strip() if not stripped_row: continue columns = stripped_row.split() # 提取第12行及以后的数据(num从0开始,第12行对应num=11) if num >= 11: A.append(float(columns[0])) B.append(float(columns[1])) C.append(float(columns[2])) D.append(float(columns[4])) # 组合并排序 data = np.vstack((A, B, C, D)).T data = data[np.argsort(data[:, 0])] return data
额外优化建议
- 把
import numpy as np移到函数外面,避免每次调用函数都重复导入模块 - 如果文件列数固定,可以考虑用numpy直接读取文件,代码会更简洁高效:
这个版本不仅代码更短,还能避免手动处理行和列的繁琐操作,减少出错概率。import numpy as np def read_file(my_file): # 跳过前11行,读取指定列(0,1,2,4) data = np.loadtxt(my_file, skiprows=11, usecols=(0,1,2,4)) # 按第0列升序排序 return data[np.argsort(data[:, 0])]
内容的提问来源于stack exchange,提问作者Ryderc
相关产品推荐
相关产品推荐

