从要添加或删除列的文件中读取数据列

问题描述 投票:0回答:1

我正在尝试将python程序调整为可“适应”具有更多或更少数据列的文件。我目前使用的方法是:

file_name = 'C:/Users/gwong/Documents/ME 021/CylindricalRollerBearingData_01.txt'

answer = 'y'
col0 = []
col1 = []
col2 = []
col3 = []
col4 = []
col5 = []
col6 = []
col7 = []
col8 = []
with open(file_name, 'r') as DataFile:
    Title = DataFile.readline()
    header = DataFile.readline().split()
    units = DataFile.readline().split()
    for line in DataFile:
        valstrings = line.split()
        col0.append(float(valstrings[0]))
        col1.append(float(valstrings[1]))
        col2.append(float(valstrings[2]))
        col3.append(float(valstrings[3]))
        col4.append(float(valstrings[4]))
        col5.append(float(valstrings[5]))
        col6.append(float(valstrings[6]))
        col7.append(float(valstrings[7]))
        col8.append(valstrings[8] + valstrings[9])

数据文件看起来像这样:

SKF Bearing Data for Cylindrical roller bearings, single row (Metric)
Principal dimensions    Basic load ratings  Fatigue load limit  Speed ratings   Designation
d[mm]   D[mm]   B[mm]   C[kN]   C0[kN]  Pu[kN]  Ref speed[r/min]    Lim speed[r/min]    Designation bearing
15  35  11  12.5    10.2    1.22    22000   26000   NJ 202 ECP
15  35  11  12.5    10.2    1.22    22000   26000   NU 202 ECP
15  35  11  12.5    10.2    1.22    22000   34000   NU 202 ECPHA

这是使用文件中数据的代码的方式:

while (answer == 'y'):
    UserMins =[] 
    UserMaxs =[]
    ans = 'y'
    while (ans == 'y'):
        UserVals = []


        UserVals.append(col0)
        UserVals.append(col1)
        UserVals.append(col2)
        UserVals.append(col3)
        UserVals.append(col4)
        UserVals.append(col5)
        UserVals.append(col6)
        UserVals.append(col7)

虽然效率低下,但适用于我正在使用的当前文件。但是,如果我用另一个具有不同列的文件来更改文件,它将弹出并显示列表超出范围的错误,否则将不会打印文件中的所有数据。

无论列数多少,都有可能从文件中读取数据吗?

python file-read
1个回答
0
投票

而不是将col0col8作为单独的列表,而可以将其中的列表作为cols = [[]]。您有方块

for line in DataFile:
        valstrings = line.split()
        col0.append(float(valstrings[0]))
        col1.append(float(valstrings[1]))
        ...

这是处理valstrings中每个元素的幼稚方法。可以在for line in DataFile:循环内添加另一个for循环,该循环将每个列值插入适当的数组。

for line in DataFile:
        valstrings = line.split()
        for i,val in enumerate(valstrings):
                 cols[i].append(float(val))

我不确定如何使用带有UserVals.append(col0)等的部分,但是我会尝试将列标题用作字典中的键,因此您可以在不知道有多少列的情况下引用每列,并且应该使您的代码更具可读性。

第一段代码当然可以清除为:

file_name = 'C:/Users/gwong/Documents/ME 021/CylindricalRollerBearingData_01.txt'

answer = 'y'
# Note that cols starts as a list, and lists are appended to it later
cols = []
with open(file_name, 'r') as DataFile:
    Title = DataFile.readline()
    header = DataFile.readline().split()
    units = DataFile.readline().split()
    for line in DataFile:
        valstrings = line.split()
        # Edit made here to initialize cols list of lists
        for col in valstrings:
            cols.append([])
        for i,val in enumerate(valstrings):
                 cols[i].append(float(val))

而且我认为底部可以更改为:

while (answer == 'y'):
    UserMins =[] 
    UserMaxs =[]
    ans = 'y'
    while (ans == 'y'):
        UserVals = []
        for col in cols:
            UserVals.append(col)

我还没有测试过,但是在开始引用cols之前,您可能必须将cols[i]数组的元素初始化为空列表。>

© www.soinside.com 2019 - 2024. All rights reserved.