繁体   English   中英

使用Python替换docx中的文本

[英]replace text from docx using Python

我正在做一个小项目,以帮助我完成为员工创建欢迎文档的“手动”工作。

我想做的是:1)从CSV文件中提取单元格内容(用户名,名字,密码)2)提取单元格内容,并替换DOCX文件中的字符串[FirstName],[Username]和[Password] 。

这是代码:

""" Dependencies """
import csv
import numpy as np
import re
import shutil
import docx
#import fileinput

""" Open CSV and add usernames to list """
with open('UploadUsers.csv', 'rU') as csvfile:
    readCSV = np.loadtxt(csvfile, delimiter=',', skiprows=1, dtype = 'str')
    first_names = []
    usernames = []
    passwords = []

for row in readCSV:
    username = row[1]
    first_name = row[2]
    password = row[5]

    usernames.append(username)
    first_names.append(first_name)
    passwords.append(password)

for username in usernames:

    doc = "Free_Tracking_Manager_US.docx"
    doc_copy = "Free_Tracking_Manager_US.docx."+username+".docx"

    """ Make file copies """
    shutil.copy(doc, doc_copy)

    """ Make changes to first name, username and password """

    document = docx.Document(doc_copy)

    for paragraph in document.paragraphs:
        if '[FirstName]' in paragraph.text:
            print(first_name)
        if '[Username]'  in paragraph.text:
            print(username)
        if '[Password]'  in paragraph.text:
            print(password)

    """ Save document """
    document.save(doc_copy)

该脚本运行时没有错误,它可以创建文档的副本,但不会替换字符串。 不知道问题出在哪里...

更新:

进行了Abass建议的更改。 我更换:

for paragraph in document.paragraphs:
        if '[FirstName]' in paragraph.text:
            print(first_name)
        if '[Username]'  in paragraph.text:
            print(username)
        if '[Password]'  in paragraph.text:
            print(password)

与:

for paragraph in document.paragraphs:
        if '[FirstName]' in paragraph.text:
            print(first_name)
            paragraph.text = paragraph.text.replace('[FirstName]',first_name)
        if '[Username]'  in paragraph.text:
            print(username)
            paragraph.text = paragraph.text.replace('[Username]',username)
        if '[Password]'  in paragraph.text:
            print(password)
            paragraph.text = paragraph.text.replace('[Password]',username)

还是不行...

IIUC在检查关键字字符串的存在之后,您无需替换它们:

进行此更改,它将替换字符串。

for paragraph in document.paragraphs:
        if '[FirstName]' in paragraph.text:
            print(first_name)
            paragraph.text = paragraph.text.replace('[FirstName]',first_name)
        if '[Username]'  in paragraph.text:
            print(username)
            paragraph.text = paragraph.text.replace('[Username]',username)
        if '[Password]'  in paragraph.text:
            print(password)
            paragraph.text = paragraph.text.replace('[Password]',username)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM