Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在多个文件中加载-嵌套循环_Python_List_Nested - Fatal编程技术网

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

Python在多个文件中加载-嵌套循环,python,list,nested,Python,List,Nested,几天以来我一直在为一个问题苦苦挣扎。我有100个不同的时间文件夹,每个文件夹包含11个sensor1.dat、sensor2.dat等。。档案 sensor1.dat示例 x1,x2,x3 1,2,3 4,5,6 7,8,9 我试图在所有时间文件夹上循环,并为每个时间步加载传感器文件的最后一行 结果可以是嵌套列表: 外部列表包含时间数据-每个时间数据的内部列表所有传感器数据,这意味着:外部列表100行,内部列表11行,每个外部行 因此,我尝试了以下几点: def getData(): for

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

sensor1.dat示例

x1,x2,x3
1,2,3
4,5,6
7,8,9
我试图在所有时间文件夹上循环,并为每个时间步加载传感器文件的最后一行

结果可以是嵌套列表: 外部列表包含时间数据-每个时间数据的内部列表所有传感器数据,这意味着:外部列表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行中的数据

我的问题在哪里


提前有什么建议和感谢吗?

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

范例-

>>> 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))]

请参阅,了解您遇到的核心问题。此外,您似乎在列表中附加了一个列表,这意味着该列表将包含另一个列表。我认为您应该做的是执行
zw.append(getData())
,而只是将
zw
初始化为空列表。@user3012486如果答案对您有帮助,请记住接受答案(通过单击答案左侧的勾号使其变为绿色),这将对社区有帮助。