遍历文件时,如何将每个文件名附加到列表中? [复制]

Posted

技术标签:

【中文标题】遍历文件时,如何将每个文件名附加到列表中? [复制]【英文标题】:While iterating through files, how to append each filename to a list? [duplicate] 【发布时间】:2021-04-22 04:11:39 【问题描述】:

我正在遍历文件文件夹,从 xml 中提取一些文本,并希望跟踪每个文本匹配来自哪个文件。

我希望将文件名放入 filename_master 列表中。我认为使用正则表达式(每个文件名有 14 个数字 .xml)可能会使我过于复杂,但这不会发生在我身上。

path = '/Users/Downloads/PDF/XML/'
read_files = glob.glob(os.path.join(path, '*.xml'))

filename_master=[]
text_master=[]

for file in read_files:
    parse = ET.parse(file)

    root = parse.getroot()
    all_nodes = list(root.iter())
    ls=[ele.text for ele in all_nodes if ele.findall('[@mark="1"]')]
    
    
    my_exp = re.compile(r'.*(\d14)\.xml') 
    name = my_exp.match(file).group(1) 
    
    filename_master.append(name)
    text_master.append(ls)

【问题讨论】:

【参考方案1】:

如果你确定每个文件都有 14 位,你可以

    name = file[-18:-4]
    filename_master.append(name)

或者如果您在 linux 环境中(其中“/”是路径分隔符):

    name = file.split('/')[-1][:-4]
    filename_master.append(name)

或更好:

    name = os.path.basename(file)[:-4]
    filename_master.append(name)

但是恕我直言,使用正则表达式很好。

【讨论】:

以上是关于遍历文件时,如何将每个文件名附加到列表中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在复制粘贴时覆盖 VS Code 中的文件(而不是将 *.1* 附加到文件名)?

Excel VBA - 循环遍历多个文件夹中的文件,复制范围,粘贴到此工作簿中

如何在 Java DocumentBuilder 中解析 XSD 文件期间将元素附加到现有节点列表

Python for 循环仅将最后一个列表作为值附加

如果已经有同名文件,如何将文件复制到文件夹中?

遍历目录树并将日期戳附加到文件名