Python在多个文件中加载-嵌套循环
几天以来我一直在为一个问题苦苦挣扎。我有100个不同的时间文件夹,每个文件夹包含11个sensor1.dat、sensor2.dat等。。档案 sensor1.dat示例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
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如果答案对您有帮助,请记住接受答案(通过单击答案左侧的勾号使其变为绿色),这将对社区有帮助。