【问题标题】:Loop through files in python在python中循环文件
【发布时间】:2018-07-23 19:24:52
【问题描述】:

我在 jupyter notebook 上使用 python 3.6。

我写了这段代码来可视化一些数据。

from nilearn import plotting

DMN = plotting.plot_glass_brain("/Users/projets/rmap_seeds/average_rmap_DMN.nii.gz",
                            draw_cross = True, colorbar=True)
plt.show()

我有很多不同的文件想要可视化

我想做一个 for 循环,所以我不必手动编写它们。我这里只是举了两个例子,但实际上我有数百个。

我试过了:

image = {'average_rmap_DMN', 'average_rmap_CER'}

for i in image :
    image(i) = plotting.plot_glass_brain("/Users/projets/rmap_seeds/", 
    (image{i}), ".nii.gz", draw_cross = True, colorbar=True, threshold=0.7)

我得到这个错误:

SyntaxError: invalid syntax

谢谢!

【问题讨论】:

  • 您在image(i) = plotting.plot_glass_brain... 这一行收到此错误?
  • 请查看如何创建和访问列表——您已创建字典但访问不正确
  • 此问题与您要完成的任务无关。 image(i) 尝试将image 作为函数调用(给SyntaxError: can't assign to function call,而(image{i}) 试图用一组索引(我猜;这就是我在心理上解析它的方式,但我不知道它的确切路线成为语法错误)。[i] 是用于索引的语法。
  • 我将其更改为 [],现在我收到此错误:TypeError: list indices must be integers or slices, not str
  • @bim1,我的回答部分解决了该错误。你还有问题吗?

标签: python loops


【解决方案1】:

Python 使用方括号而不是花括号进行索引,因此您应该使用image[i] 来消除语法错误。 但是,在 python 中,遍历列表会返回列表项而不是索引。
使用i 进行索引将不起作用,但您可以直接使用它:

for img in image:
    do_something(img)

或者使用列表推导

[do_something(img) for img in image]

如果你想继续修改它,你可以将列表推导的结果分配给一个新变量,这样你的代码就会变成

image = {'average_rmap_DMN', 'average_rmap_CER'}

res = [plotting.plot_glass_brain("/Users/projets/rmap_seeds/", 
    img, ".nii.gz", draw_cross = True, colorbar=True, threshold=0.7) 
    for img in image]

最后,从您的代码来看,我建议您阅读一些 Python 入门教程。像 this 这样针对 matlab 用户的东西可能是一个不错的起点,或者 this one 以获取一般信息。

【讨论】:

    【解决方案2】:

    在您的示例中,您有两个表达式 image(i)image{i}

    1. image(i) 这是一个问题,因为字符串是不可调用的(你不能给它们传递参数并让它们像函数一样工作)。这不是一个有效的操作,因此在这种情况下会引发错误。 (Python 解析器认为您正在尝试分配给函数调用。)

    2. image{i} 这将是一个语法错误。 {i} 是一个集合文字,所以你的表达式就像有 x 1,这在 Python 中是无效的语法。如果您正在寻找索引,那就是image[i]

    但是有一个问题:images 应该是一个集合还是一个字典?因为如果它是一个字典,那么你正在遍历键,它应该是images[i]。但是,如果它是一个集合(它似乎是您正在使用的),则会出现更多问题。

    1. 集合无法编入索引
    2. 您不能按字符串索引列表或字符串。

    字符串索引问题,当你说for string in strings:string 是容器中的字符串,而不是它的整数索引。

    因此,您的代码中似乎存在一些更严重的结构性问题。你应该想想你需要什么数据结构,看看内置容器listdictsettuple等的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 2019-01-01
      • 1970-01-01
      • 2011-05-18
      • 2021-10-16
      相关资源
      最近更新 更多