Python操作系统重命名()用于父目录中多个子文件夹中的文件

2024-04-18 02:41:17 发布

您现在位置:Python中文网/ 问答频道 /正文

文件结构
我有一个名为test_folder的父目录,其中有几个(大约600个)子文件夹。每个子文件夹包含以下内容:

-始终是metadump.xml文件
-一个.pdf.pptx.xls.docx文件

目标
我想根据来自同一子文件夹中的.xml文件的标题信息重命名父目录(test_folder)的每个子文件夹中的.pdf.pptx.xls.docx文件。你知道吗

import os

for root, dirs, files in os.walk("C:\\**\\Downloads\\test_folder"):
    for file in files:
        if file == 'metadump.xml':
            filename = os.path.join(root, file) 

            # READ XML FILE TO OBTAIN 'TITLE' INFORMATION
            with open(filename, 'r', encoding='utf-8') as xml_file:
                contents = xml_file.read()
                title = re.search('<dc:title rsfieldtitle="Title" rsembeddedequiv="Name" rsfieldref="8" rsfieldtype="0">(.+?)</dc:title>', contents).group(1)
                print(title) #AS A CHECK FOR SUCCESSFUL TITLE EXTRACTION

    # GOING THROUGH FILES AGAIN TO FIND NON-XML FILE
    for file in files:
        if file != 'metadump.xml':
            print(file) #CHECKING THE CORRECT FILE TO BE RENAMED IS SELECTED
            src = os.path.join(root, file) #ORIGINAL SOURCE PATH
            dst = os.path.join(root, title)#NEW DESTINATION PATH
            os.rename(src, dst) #TO RENAME FILES IN THE SUBFOLDER TO THE TITLE

运行此命令后,我收到以下消息:
Project Alpha<;--已从XML中提取了正确的标题
foobar.pdf<;--已选择子文件夹中正确的“其他”文件进行重命名

[WinError 123] The filename, directory name, or volume label syntax is incorrect: 'C:\\**\\Downloads\\test_folder\\banana\\foobar.pdf' -> 'C:\\**\\Downloads\\test_folder\\banana\\Project Alpha'
我不确定为什么无法重命名另一个文件foobar.pdf,其标题是从同一子文件夹中的.XML文件中提取的。你知道吗


所需输出的示例
test_folder父目录的banana子文件夹中,我们有:
给定:
-foobar.pdf(通用文件名)
-metadump.xml(在这个文件中,可以提取标题:项目Alpha

结果: {br/>名称已更改(此处)
-metadump.xml


提前谢谢你的想法!你知道吗


Tags: 文件totest文件夹标题pdftitleos
1条回答
网友
1楼 · 发布于 2024-04-18 02:41:17

你的压痕全弄乱了。您应该首先读取xml,然后重命名其他文件。见下文。你知道吗

import os

for root, dirs, files in os.walk(r"C:/**/Downloads/test_folder"):
    for file in files:
        if file == 'metadump.xml':
            filename = os.path.join(root, file) 

            with open(filename, 'r', encoding='utf-8') as f_xml:
                contents = f_xml.read()
                title = re.search('<dc:title rsfieldtitle="Title" rsembeddedequiv="Name" rsfieldref="8" rsfieldtype="0">(.+?)</dc:title>', contents).group(1)
                print(title) #AS A CHECK FOR SUCCESSFUL TITLE EXTRACTION

# NOW GO THROUGH YOUR FILES IN CURRENT DIRECTORY AGAIN
    for file in files:
        if file != 'metadump.xml':
            src = os.path.join(root, file)
            dst = os.path.join(root, title)
            os.rename(src, dst) #TO RENAME FILES IN THE SUBFOLDER TO THE TITLE

或者,更好的是:

import os

for root, dirs, files in os.walk(r"C:/**/Downloads/test_folder"):
    # find xml file
    xmlFile = [r for r in files if r[-3:]=='xml']
    filename = os.path.join(root, xmlFile)

    with open(filename, 'r', encoding='utf-8') as f_xml:
        contents = f_xml.read()
        title = re.search('<dc:title rsfieldtitle="Title" rsembeddedequiv="Name" rsfieldref="8" rsfieldtype="0">(.+?)</dc:title>', contents).group(1)
        print(title) #AS A CHECK FOR SUCCESSFUL TITLE EXTRACTION

# NOW RENAME FILES
[os.rename(os.path.join(root, f), os.path.join(root, title)) for f in files if f[-3:]!='xml']

我看不出你在哪里设置文件扩展名,也许你需要重命名.os(文件,title+'.jpg')或者别的什么。你知道吗

相关问题 更多 >