我在需要更新元數據的文件夾和子文件夾中有大約300個docx文件。我有一個單獨的包含元數據的300多行csv文件:每行包含文件名,關鍵字和行中的標題。使用python-docx更新大量文件的docx元數據
我想循環瀏覽從csv提取內容並將元數據插入docx文件的docx文件。 Docx文件從根文件夾向下存儲2個子文件夾。
到目前爲止,我已經勾畫出以下內容。我正在努力研究如何循環訪問csv文件並按順序將元數據應用於每個文件。我確信有一個相對簡單的方法可以解決這個問題,建立循環並獲取csv內容就是我迷失的地方。我是一個小菜鳥,和我一樣,感受我的方式。
任何提示讚賞。
#running in python 3.5.2 32bit
import csv
from docx import Document
import os
import sys
csv_path = ("datasheet_metadata_uplift.csv")
def update_docx_metadata(document, keywords, title):
"""
Update the *keywords*, and *title* metadata
properties in *document*.
"""
core_properties = document.core_properties
core_properties.keywords = keywords
core_properties.title = title
def read_csv_lines(filename, keywords, title):
"""
Reads the csv lines, returns *filename*, *keywords*, *title*
"""
with open(csv_path, 'r') as f:
csv_file = csv.reader(f)
for row in csv_file:
filename = row[0]
keywords = row[1]
title = row[2]
def open_docx(filename):
"""
Search for docx file and open it
"""
for root, dirs, files in os.walk("."):
if filename in files:
doc_path = os.path.join(path, filename)
csv_lines = read_csv_lines(filename, keywords, title)
for filename, keywords, title in csv_lines:
document = Document(doc_path)
update_doc_metadata(filename, keywords, title)
document.save(doc_path)
嗨Scanny - 謝謝!非常有幫助的答案,我一直在重構使用函數,如你所建議的,但有些不太正確。我得到一個'NameError:name'文件名'未定義'的錯誤與代碼的最後部分有關。我已經使用新代碼更新了原始帖子。 有什麼想法? – Aidan
@Aidan我想你可能會對函數參數在Python中的作用感到困惑。他們將價值(*)*轉化爲*函數,但通常不會*出*。爲此你需要一個return語句。所以read_csv_lines應該只是將csv_path作爲參數,然後返回(filename,keywords,title)序列(可能是元組)的序列(可能是list)。我認爲read_csv_lines的返回值只是'return [row for csv_file]''。您可能想要查找一些Python教程資源。我喜歡[這一個](https://pymotw.com/3/)和Python官方教程是相當不錯:) – scanny
好吧,感謝您的幫助scanny,我意識到,我今天看到這一點。 – Aidan