【问题标题】:For Loops Help in pythonpython中的for循环帮助
【发布时间】:2021-05-31 15:03:21
【问题描述】:

需要您的帮助吗?

我正在尝试匹配列表 newtracks(文件夹中的歌曲名称)与列表 filezto 和电子表格中的专辑。 如果文件夹中的歌曲名称与列表 filezto 匹配,并且有一个 Nasb 专辑,则将其复制到文件夹列表(ordfldrtosrt),如果不是,则将 nasb 专辑复制到列表(ntsubfldrs)。

由于某种原因,运行 if 语句时不会同步它们以打印它们匹配并将文件复制到文件夹中。我尝试了不同的选项,但无法使其工作。提前致谢。

albm = ["NASB", "NASB", "NASB", "NASB", "NTSB", "NTSB", "NTSB", "NTSB"]

newtracks = [
    "Track1.mp3",
    "Track2.mp3",
    "Track3.mp3",
    "Track4.mp3",
    "Track5.mp3",
    "Track5.mp3",
]

filezto = [
    "Track1.mp3",
    "Track2.mp3",
    "Track3.mp3",
    "Track4.mp3",
    "Track5.mp3",
    "Track5.mp3",
]

ordfldrtosrt = ["1-GEN-GENE", "2 - EXO - Exos", "3 - LEV - Lev", "4 - NUM - Numb"]

ntsubfldrs = ["1-MAT-Matt", "2 - MRK - Mar", "3 - LUK - LI", "4 - JHN - Jo"]

for album in albm:
    for newtracks, filezto, ordfldrtosrt, ntsubfldrs in (
        (ntk, ft, otm, nts)
        for ntk in newtracks
        for ft in filezto
        for otm in ordfldrtosrt
        for nts in ntsubfldrs
    ):
        if album == "Nasb" and newtracks == filezto:

            print("Yes", newtracks, " files to", filezto)

            # shutil.copy('C:\\Users\\mrdrj\\Desktop\\SJ\\NASB\\'+newtracks,  'D:\\Desktop\\pythonProject\\Nasb\\'+ ordfldrtosrt+'\\'+newtracks)
        else:
            print("No", newtracks, " files to", filezto)
            # shutil.copy('C:\\Users\\mrdrj\\Desktop\\SJ\\NASB\\'+newtracks,  'D:\\Desktop\\pythonProject\\Nasb\\'+ ntsubfldrs +'\\'+newtracks)


【问题讨论】:

  • 省略数据完全没问题,但您使用“等”意味着语法错误。 ntsubfldrs = = 是另一个语法错误。请更新您的示例,使其至少有效。您的硬编码输入,很好,现在告诉您获得和期望的输出(使用您的固定程序)。另外,因为这是 python 缩进问题。
  • 在一行中使用函数而不是 5 个 for 循环。修复语法错误后,我留下“NameError:名称'filezto'未定义”。你真的很难帮助你。
  • 感谢您的编辑。当运行它循环匹配重复值第一个示例 track1.mp3 track1.mp3 然后它拆分并执行 track1.mp3 仍然和 track2.mp3、track3.mp3 等。我正在寻找的结果是将 newtracks 与 filezto 和检查专辑是否为 NASB,如果是,则将歌曲从列表中复制到文件夹。我对 python 还是很陌生,并且仍在努力。有没有解释缩进认为缩进很好的网站。谢谢
  • 请使用此信息更新您的问题。你所有的代码都被缩进了,所以这意味着我必须重新格式化才能运行它。
  • 为什么albm包含重复值?

标签: python python-3.x list loops for-loop


【解决方案1】:

根据您的上一条评论,我猜您有来自spreadsheet 的(专辑、曲目)列表,并且您正试图将其与folder 中的一张专辑中的曲目列表相匹配:

folder = [
    "Track1.mp3",
    "Track2.mp3",
    "Track3.mp3",
    "Track4.mp3",
    "Track5.mp3",
    "Track5.mp3",
]
spreadsheet = [
    ( "NASB", "Track1.mp3" ),
    ( "NASB", "Track2.mp3" ),
    ( "NASB", "Track3.mp3" ),
    ( "NASB", "Track4.mp3" ),
    ( "NASB", "Track5.mp3" ),
    ( "NASB", "Track5.mp3" ),
    ( "NTSB", "Track1.mp3" ),
    ( "NTSB", "Track2.mp3" ),
    ( "NTSB", "Track3.mp3" ),
    ( "NTSB", "Track4.mp3" ),
    ( "NTSB", "Track5.mp3" ),
    ( "NTSB", "Track5.mp3" )
]
for album, track in spreadsheet:
    if album == 'NASB' and track in folder:
        print('%s %s' % ('Yes', track))
    else:
        print('%s %s' % ('No', track))

with 给你输出:

Yes Track1.mp3
Yes Track2.mp3
Yes Track3.mp3
Yes Track4.mp3
Yes Track5.mp3
Yes Track5.mp3
No Track1.mp3
No Track2.mp3
No Track3.mp3
No Track4.mp3
No Track5.mp3
No Track5.mp3

【讨论】:

  • 谢谢。用于 albm 时,在电子表格中跟踪:我得到 ValueError: too many values to unpack (expected 2)。我使用:电子表格 = albm + 标题(电子表格列)加入列表并为文件夹中的歌曲使用新曲目,而 albm.append(cb.value) 和标题 title.append(tlt.value+'.mp3') 是值用过的。我不知道你也可以以这种方式使用 for 循环。我也在学习。谢谢
  • 请使用当前代码更新您的问题。如果您的电子表格有单独的值,请将它们分开,因为它通常更容易处理,仅在需要时连接。
  • 请参阅更新:对于 albm,在电子表格中跟踪:如果 albm == 'NASB' 并在 newtracks 中跟踪:print('%s %s' % ('Yes', track)) 否则: print('%s %s' % ('No', track)) 我连接的原因是添加专辑和歌曲。 title.append(tlt.value+'.mp3') 电子表格 = albm + 标题
  • 好吧,当你需要的时候听起来像这样。使用单个格式字符串可能更容易: '%s%s' % (tlt.value, '.mp3') 或其他。祝你好运!
  • 谢谢。我检查了电子表格的长度,它超过了金额。所以现在我正在寻找一种方法来组合第 1 列(专辑)和第 14 列(标题)以具有相同的值。就像电子表格列表示例一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 2016-11-30
  • 2015-03-30
  • 1970-01-01
相关资源
最近更新 更多