【问题标题】:Creating folders using loop使用循环创建文件夹
【发布时间】:2020-12-14 18:43:39
【问题描述】:
import xml.etree.cElementTree as ET
import os
path = r'C:\Users\LME_s\Desktop\python quiz\Sessions'
for filename in os.listdir(path):
    if not filename.endswith('.xml'): continue
    fullname = os.path.join(path, filename)
    tree = ET.parse(fullname)
    root=tree.getroot()
    numbers = [e.attrib['Number'] for e in root.findall('.//ActionUnit')]
    base_path = r'C:\Users\LME_s\Desktop\python quiz\Sessions/new'
    for folder in numbers:
        os.mkdir(os.path.join(base_path, folder))
        
    #print(numbers)

我创建了一个循环来读取 XML 数据并将这些数据动态地放入数组中。这是输出,所以这是我的问题。在每次迭代中,我需要为每个数组元素创建名为“AU45”和“not AU45”的文件夹。这是一个问题,在第一次迭代中,我创建了一个名为“10”的文件夹,但在下一次迭代中,我还有另一个 10 值,我得到一个异常,因为一个名为“10”的文件夹也存在。我怎样才能避免这种情况?

【问题讨论】:

  • 您能否详细介绍一下文件夹的命名结构?通常这是一个两行解决方案,首先检查文件夹的路径是否存在,然后如果文件夹不存在则创建它。 os.makedirs(路径/到/文件夹)
  • 好的,我创建了一个新的代码块,为每个数组元素创建一个文件夹名称,但我还有另一个问题。你能检查一下代码行吗?我收到一个错误,因为在循环中我之前创建了一个名为“10”的文件夹,它给出了一个错误,因为我在另一个数组中有另一个“10”。
  • 所以我不确定你想要完成什么。如果文件夹 10 已经存在,为什么会出现问题?是否要将新文件写入同一文件夹中?创建文件夹时是否出错?没有你的具体情况,几乎不可能提供帮助。
  • 您在每次迭代中看到我的数组输出了吗?我正在从每个 XML 文件中读取一个值并将其推送到一个数组中。所以在每次迭代中,我都会创建一个文件夹,并且文件夹的名称等于数组值。在第一次迭代中,我创建了名为 45 和 5 的文件夹,在第二次 10 和 25 中,在第三次迭代中,我得到了一个异常,因为一个名为 10 的文件夹已经存在,并且我得到一个异常,这个文件夹已经存在,你不能创建另一个文件夹。我需要避免这种情况。所以基本上我需要一个函数来跳过已经存在的数组值。

标签: python xml directory operating-system mkdir


【解决方案1】:

将创建的文件夹保存在一个集合中。

import xml.etree.cElementTree as ET
import os
path = r'C:\Users\LME_s\Desktop\python quiz\Sessions'
created_folders = set()
for filename in os.listdir(path):
    if not filename.endswith('.xml'): continue
    fullname = os.path.join(path, filename)
    tree = ET.parse(fullname)
    root=tree.getroot()
    numbers = [e.attrib['Number'] for e in root.findall('.//ActionUnit')]
    base_path = r'C:\Users\LME_s\Desktop\python quiz\Sessions/new'
    for folder in numbers:
        if folder not in created_folders:
            os.mkdir(os.path.join(base_path, folder))
            created_folders.add(folder)

【讨论】:

  • @EmreSarı 请参阅stackoverflow.com/questions/65276888/… - 这是我之前对您面临的同一任务的回答。随意投票:-)
  • 我不能,因为我有 11 个声誉,但我会:D
  • 我可以再问一个问题吗,现在我正在尝试将 .avi 文件复制到相关文件夹,但出现 NotADirectoryError: [WinError 267] : 'C:\\Users\\LME_s\\Desktop \\python quiz\\Sessions\\S001-001.avi' 我使用的路径与 XML 的路径相同。但我不知道是什么问题。
  • avi 是一个文件,而不是一个目录。
  • 对于shutil.copy功能我不需要确切的位置吗?我正在使用 .avi 文件的位置和新位置; shutil.copytree(avilocation,new location) 我做错了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2014-02-19
  • 2013-06-29
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
相关资源
最近更新 更多