Python循环上限

2024-06-08 03:26:49 发布

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

首先让我说我对python还比较陌生。

好的,我正在运行代码,对数据文件执行物理计算/绘制图形等,我需要做的是循环遍历多个文件和子文件。但问题是每个文件中有不同数量的子文件(例如,文件0有711个子文件,文件1有660个奇数)。当我在索引x处没有子文件的文件中运行它时,它显然不喜欢这样,所以我想知道是否有方法让它运行(迭代?)在每个文件中自动达到最终限制?

我得到的是一个嵌套循环,比如:

for i in range(0,120):
    for j in range(0,715):

         stuff

请提前为我的帮助干杯,如果我的解释不正确,请道歉!

编辑: 更多的代码。所以我实际上是在计算/绘制气体和暗物质粒子的角动量。这些是在光环(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的范围设置的上限超过了某个特定文件中的光晕数(我得到:光晕索引超出界限)。再见)但我只是想知道是否有更好,更整洁的方式让它运行。


Tags: 文件代码inimportforas绘制range
3条回答

我可能误解了您的结构/意图,但听起来您想对某个文件夹结构中的每个文件执行一些计算,其中的文件夹包含不同数量的数据文件。在这种情况下,我将使用^{}函数,而不是尝试手动索引每个数据文件。

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包装器,它返回完整路径,而不仅仅是基名),但这将是我的基本想法。

如果您还需要每个文件的索引,您可能可以使用^{}sorted(例如for i, file in enumerate(sorted(os.listdir(...))))的组合来获得它,但具体情况显然取决于您的文件名和目录结构。

你可能想要这样的东西:

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

当您构建要处理的文件和子文件列表时,可以将列表放在名为filelist的变量中,将子文件列表放在名为subfile list的变量中,然后可以按如下方式运行循环

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

相关问题 更多 >

    热门问题