【发布时间】:2018-11-17 11:16:37
【问题描述】:
文件结构
我有一个名为test_folder 的父目录,其中有几个(大约600 个)子文件夹。每个子文件夹包含以下内容:
- 始终是 metadump.xml 文件
- .pdf、.pptx、.xls 或 .docx 文件
目标
我想根据来自.xml 文件位于同一子文件夹中,在下面的示例中名为 banana。
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 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'
我不确定为什么我无法使用从同一子文件夹中的 .XML 文件中提取的“标题”重命名另一个文件 foobar.pdf。
所需输出示例
在test_folder 父目录中,在banana 子文件夹中,我们有:
鉴于:
-foobar.pdf(通用文件名)
-metadump.xml(在这个文件中,可以提取标题:Project Alpha)
结果:
-Project_Alpha.pdf(此处pdf名称已更改)
-metadump.xml
提前感谢您的想法!
【问题讨论】:
-
如果文件 == "metadatadump.xml" (第 5 行),您只会进入代码的重命名部分,因此文件永远不会变成 .xml 文件以外的任何内容。只要首先检查 xml 文件,取消缩进第 11-15 行和代码就应该可以工作?抱歉,我没有时间测试,但这是一个好的开始。
-
与您的问题无关,但是您拥有所有这些
else: passes 有什么特别的原因吗? Python 中的 else 子句不是强制性的。如果您不需要它们,您可以简单地将它们排除在外。 -
嗨@TD-Asker 我的想法是,我知道每个子文件夹都包含一个“metadump.xml”文件,我从中获得“标题”。之后,我尝试将子文件夹中的 OTHER 文件重命名为此“标题”,而不是“metadump.xml”文件本身。谢谢!
-
我明白你想要做什么,我评论说为什么你的初始代码不起作用。您是否尝试过 os.rename 为您的 python 环境中的一个特定文件检查您是否具有正确的权限等?还要确保将文件从 foobar.pdf 重命名为 Project_Alpha.pdf - 看起来您可能缺少文件扩展名?
标签: python xml directory rename