【问题标题】:Python script iterates over whole folder but skips files in the folderPython脚本遍历整个文件夹但跳过文件夹中的文件
【发布时间】:2021-07-07 08:26:35
【问题描述】:

我尝试运行以下代码。代码应该从一个目录中读取 hdf5 文件,并为每个 hdf5 文件创建一个具有相同名称的 png 和一个 txt 文件(顺便说一句。我需要它作为 CNN YOLO 的输入)。 该代码符合我的描述,但仅适用于 20 张图片!我添加了 print(i) 以查看 for 循环是否正常工作......确实如此。它打印目录中的每个文件(超过 200 个文件)。但它只会创建 20 个 .png 和 20 个 .txt 文件。

def process_fpath(path1, path2):
    sensor_dim = (101, 101)
    onlyfiles = [f for f in os.listdir(path1) if isfile(join(path1, f))]

    for i in onlyfiles:
        if i.endswith(".hdf"):
            print(i)
            #cut ".hdf"
            name = str(i[0:-5]) 
            # create png
            im = h5py.File(path1 + str(i), 'r')
            labels_im = im['labels']
            image = im['image']
            plt.imsave(path2 + name + '.png', image)
            
            # create txt
            exp = np.column_stack((np.zeros(np.size(labels_im,0)) , labels_im[:,0]/sensor_dim[0], labels_im[:,1]/sensor_dim[1], labels_im[:,3]/sensor_dim[0], labels_im[:,3]/sensor_dim[0]))
            np.savetxt(path2 + name + '.txt', exp, delimiter = '  ', fmt=['%d', '%8f', '%8f', '%8f', '%8f'])

            continue
        else:
            continue

这是我的第一篇文章,如果有什么不对的地方,请告诉我。

【问题讨论】:

  • 您计算输出文件名的表达式是否有可能产生重复项?这会导致后面的文件覆盖较早的同名文件,从而看起来只生成了一个文件。

标签: python data-science


【解决方案1】:
  1. 也许是因为name 变量?您删除了 5 个字符,但您只想删除 4 个:name = str(i[0:-4])
  2. 与您的问题无关,最后 3 行无用。您可以删除它们。
            continue
        else:
            continue
  1. 尝试在给定文件上运行无法理解问题所在,而不是在每个文件上循环。

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多