Python在多文件嵌套循环中加载

2024-04-26 04:51:03 发布

您现在位置:Python中文网/ 问答频道 /正文

几天以来我一直在为一个问题苦苦挣扎。我有100个不同的时间文件夹,每个文件夹包含11个sensor1.dat,sensor2.dat等。。文件夹。你知道吗

sensor1.dat示例

x1,x2,x3
1,2,3
4,5,6
7,8,9

我正在尝试循环所有的timefolders,并为每个timestep加载传感器文件的最后一行

结果可以是嵌套列表: 外部列表包含时间数据-每个时间数据的内部列表所有传感器数据,这里的意思是:外部列表100行,内部列表11行,每个外部行。你知道吗

因此,我尝试了以下方法:

def getData():
for TIME in TIMES:   
    cd_string = TIME
    cd_string = string.replace(cd_string,'\n','') 
    os.chdir(cd_string)

    print(TIME)
    i_sensors=11
    data=[]
    for i in xrange(1,i_sensors+1):
        #print i
        sensor_string='../../sets/'+cd_string+'/w_z_sensor_'+str(i)+'_U.dat'
        data_input = np.genfromtxt(sensor_string, delimiter="," , skip_header=1)
        data.append(data_input[-1,:])  

    os.chdir('../') 
    return data



######MAIN####
TIMES = os.popen("ls -d 0.31* ").readlines()

zw=[[]] #*len(TIMES)

for i in xrange(0,len(TIMES)):
   zw[i].append(getData())

函数getData运行良好,我得到了每个时间步传感器文件所需的所有数据

问题是主要部分。在这里,我试图为每个时间文件夹附加传感器数据。这不管用。对于未注释的z=[[]]*len(TIMES),它只复制100行中的数据

我的问题在哪里?你知道吗

事先有什么建议和感谢吗?你知道吗


Tags: 数据in文件夹列表fordatastringtime
1条回答
网友
1楼 · 发布于 2024-04-26 04:51:03

正如jornsharpe提到的,您的问题是,当您使用*操作符创建列表时,它实际上在内部创建了大量的列表位置,并将您提供的列表中的元素复制到新的列表索引中。如果列表包含引用对象,它将复制引用,而不是复制引用的内容,因此,如果对某个位置的任何引用进行任何更改,它将反映在所有其他位置。你知道吗

示例-

>>> lst = [[1]] * 10
>>> lst
[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
>>> lst[0][0] = 5
>>> lst
[[5], [5], [5], [5], [5], [5], [5], [5], [5], [5]]

您应该尝试使用列表理解初始化列表-

示例-

>>> lst = [[1] for _ in range(10)]
>>> lst
[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
>>> lst[0][0] = 5
>>> lst
[[5], [1], [1], [1], [1], [1], [1], [1], [1], [1]]

就你而言-

zw=[[] for _ in range(len(TIMES))]

相关问题 更多 >