2016-06-13 75 views
0

我有一个小项目,我在工作中帮助完成为员工创建欢迎文档的“手动”工作。使用Python替换docx中的文本

我试图做的是: 1)从一个CSV文件(用户名,名字,密码) 2)取单元格内容和替换字符串[名字],[用户名]和提取细胞内容物[密码]在DOCX文件中。

这是代码:

""" 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) 

还不行......

回答

1

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) 
+0

谢谢,仍然没有工作......它使文件副本,但不会更改docx中的内容。 –

+0

请更新您的问题,并更改您所做的更改。 – Abbas

+0

完成!让我知道还有什么需要做的工作! –