首先让我说我对python很新。
好的,我正在运行代码来对数据文件执行物理计算/绘制图形等,我需要做的是循环遍历许多文件和子文件。但问题是每个文件中存在不同数量的子文件(例如,文件0具有711个子文件,文件1具有660个奇数)。当我在索引x上没有子文件的文件中运行它时,它显然不喜欢它,所以我想知道有没有办法让它运行(迭代?)到最后的限制每个文件自动?
我得到的是一个嵌套循环,如:
for i in range(0,120):
for j in range(0,715):
stuff
提前为任何帮助干杯,如果我的解释不好,请对不起!
编辑: 一些更多的代码。所以我实际上在做的是计算/绘制气体和暗物质粒子的角动量。这些是halos(j),&有许多文件(i)包含许多这些光晕。
import getfiby
import numpy as np
import pylab as pl
angmom=getfiby.ReadFIBY("B")
for i in range(0,120):
for j in range(0,715):
pos_DM = angmom.getParticleField(49,i,j,"DM","Coordinates")
vel_DM = angmom.getParticleField(49,i,j,"DM","Velocity")
mass_DM = angmom.getParticleField(49,i,j,"DM","Mass")
more stuff
getfiby是我给出的代码,它从文件中检索所有数据(我看不到)。这不是一个真正的大问题,因为我仍然能够运行计算和运算。即使我在j的范围内设置的上限超过了特定文件中的晕圈数量(我得到:Halo索引超出范围。再见。)但是,我只是想知道是否有更好,更整洁的情节让它运行的方式。
答案 0 :(得分:1)
你可能想要这样的东西:
a=range(3)
for i in range(5):
try:
b=a[i] #if you iterate over your "subfiles" by index
except IndexError:
break #break out when list index out of range
答案 1 :(得分:0)
当您构建要处理的文件和子文件列表时,您可以将列表放在名为filelist的变量中,将子文件列表放在名为subfilelist的变量中。然后可以将循环运行为
for myfile in filelist:
# Process code
for subfile in subfilelist:
# Process code.
如果您需要使用范围,那么
filerange = len(filelist)
subfilerange = len(subfilelist)
for i in range(0, filerange):
for j in range(0, subfilerange):
答案 2 :(得分:0)
我可能在这里误解了你的结构/意图,但听起来你想对某些文件夹结构中的每个文件执行一些计算,其中文件夹包含不同数量的数据文件。在这种情况下,我会使用os.listdir
函数,而不是尝试手动索引每个数据文件。
import os
for file in os.listdir(ROOT_DIRECTORY):
for subfile in os.listdir(os.path.join(ROOT_DIRECTORY, file)):
process(os.path.join(ROOT_DIRECTORY, file, subfile)) # or whatever
这当然可以通过几种方式更容易看一下(我个人拥有自己的listdir
包装器返回完整路径而不仅仅是基本名称),但那将是我的基本想法。
如果您还需要每个文件的索引,您可以使用enumerate
和sorted
的某种组合(例如for i, file in enumerate(sorted(os.listdir(...)))
)来获取它,但具体细节显然取决于你的文件名和目录结构。
答案 3 :(得分:0)
假设fileSet
是一个可迭代的file
个对象,并且每个file
对象本身都是一个可迭代的subfile
个对象,而不是:
for i,file in enumerate(fileSet):
for j,subfile in enumerate(file):
stuff
但是要仔细思考你是否真的需要索引i
和j
,因为你已经有了file
和subfile
来引用你正在处理的对象用。如果您不需要索引,那就简单地说:
for file in fileSet:
for subfile in file:
stuff
现在,如果你通过“文件”实际意味着操作系统文件系统中的文件,那么我需要你解释一下该文件系统中的子文件是什么,因为文件系统文件通常不能嵌套,只有目录可以。