(工作之后,就让自己的身心都去休息吧)

今天介绍一下文本数据的提取和转换,这里主要实例的转换为excel文件(.xlsx)转换world文件(.doc/docx),同时需要使用win32api,同pywin32库。

pandas库我之前的博客里面都有详细的介绍和使用,这里主要介绍下win32库。

PyWin32是一个Python库,可以为Python提供Windows扩展。换句话说,它允许您访问各种Windows功能 - 至少Microsoft Office的功能 - 而无需使用Microsoft的一种语言,如Visual Basic或C#。

win32com模块的下载:https://sourceforge.net/projects/pywin32/files/pywin32/(对应你的windows版本)

同时分享Galal Aly's博主:http://new.galalaly.me/2011/09/use-python-to-parse-microsoft-word-documents-using-pywin32-library/

Pywin32库的一些概念:

  1.PyWin32是一个包装器,它使您可以使用Visual Basic for Applications(VBA)中提供的相同方法和属性,但使用Python的语法。

  2.这是Word 2007开发人员参考,有用的部分是对象模型参考。我必须检查它们以了解可用的方法和属性,因此它们非常重要。

  3.在任何参考资料中,您都会找到一些用VBA编写的示例。您所要做的就是将它们转换为Python的语法。

首先介绍下win32com:

 # coding: UTF-8
import win32com.client
WordApp = win32com.client.Dispatch("Word.Application")
WordApp.Visible = False

1.因为你使用的是中国汉字,windows中文本文档大多数都是汉子处理,所以前提一定要加上# coding: UTF-8。

2.引入win32com模块。

3.打开world应用程序,python操作world程序以便写入文件。

4.是否在桌面打开world程序,这里的False就是不需要打开,反之为True。

这里主要介绍win32api的一些属性,主要为操作world文档所使用:

#新建空文档
docx=WordApp.Documents.Add()
#打开指定文档
docx = WordApp.Documents.Open(r'C:\Users\Administrator\Desktop\b.docx')
#保存到指定文档
docx.SaveAs(r"c:\Users\Administrator\Desktop\c.doc") # 文档保存
#关闭文档,需在保存文档之后
docx.Close(-1)

这里需要特别注意的是,SaveAs为另存文件,即可以不需要创建文件,另一个是打开指定文档,这里如果你不需要存入一个文档的话,就只需要打开一个文档存到另一个文档也可以,这里可以doc可以转换docx文件。

但是,如果你都要操作在你个world文件内,那么就需要追加一个docx文件内:

 #新建空文档
docx=WordApp.Documents.Add()
#打开指定文档,进行操作
docx = WordApp.Documents.Open(r'C:\Users\Administrator\Desktop\b.docx')
#保存
docx.Save

这里只需要Save即可,原理就是打开一个指定的world文件,将数据存入进去后保存即可。

这里关于world文件的保存和添加介绍完。

下面介绍些world文件的一些属性:

1、页面属性:

 docx.PageSetup.PaperSize = 7            # 纸张大小, A3=6, A4=7
docx.PageSetup.PageWidth = 8.7*28.35 # 纸张宽大小后PaperSize 就不需要了
docx.PageSetup.PageHeight = 13*28.35   # 纸张高大小
docx.PageSetup.Orientation = 1 # 页面方向, 竖直=0, 水平=1
docx.PageSetup.TopMargin = 2.45*28.35 # 页边距上=2.45cm,1cm=28.35pt
docx.PageSetup.BottomMargin = 2.45*28.35 # 页边距下=2.45cm
docx.PageSetup.LeftMargin =0.75*28.35 # 页边距左=0.75cm
docx.PageSetup.RightMargin = 0.5*28.35 # 页边距右=0.5cm

2、页面布局:

 sel = WordApp.Selection       # 获取Selection对象
sel.InsertBreak(8) # 插入分栏符=8, 分页符=7
sel.Font.Name = "宋体" # 字体
sel.Font.Size = 11 # 字大
sel.Font.Bold = True # 粗体
sel.Font.Italic = True # 斜体
sel.Font.Underline = True # 下划线
sel.ParagraphFormat.LineSpacing = 2*12 # 设置行距,1行=12磅
sel.ParagraphFormat.Alignment = 1 # 段落对齐,0=左对齐,1=居中,2=右对齐
sel.TypeText("aaa") # 插入文字
sel.TypeParagraph() # 插入空行
sel.TypeText("\n") #插入空白行

3、表格:

 tab=docx.Tables.Add(sel.Range, 7, 2)  # 增加一个16行2列的表格
tab.Style = "网格型"        # 显示表格边框
tab.Columns(1).SetWidth(2.4*28.35, 0) #调整第一列宽
tab.Columns(2).SetWidth(5.5*28.35, 0)
tab.Rows.Alignment = 1 # 表格对齐,0=左对齐,1=居中,2=右对齐
tab.CellCellCellCell(1,1).Range.Text = "aaa" # 填充内容,注意Excel中使用wSheet.Cells(i,j)
sel.MoveDown(5, 16)        # 向下移动2行,5=以行为单位
line_cells = tab.columns[0].cells   #第一列所有空格 0,1代表第几列
line_cells[0].Range.Text= 'N'     #第一列第一个空格中添加“N”
line_cells[1].Range.Text = '号'.decode('utf-8')
line_cells[2].Range.Text = '牌'.decode('utf-8')
line_cells[3].Range.Text = '数量'.decode('utf-8')
line_cells[4].Range.Text = '日期'.decode('utf-8')
line_cells[5].Range.Text = '名称'.decode('utf-8')
line_cells[6].Range.Text = '编号'.decode('utf-8')

贴上Pandas模块和win32com的完整代码(主要看分布):

 # coding: UTF-8
import win32com.client
import time
import pandas as pd
def parser():
df = pd.read_excel('C:\\Users\\Administrator\\Desktop\\222.xlsx')
pd.set_option('display.width',None)
WordApp = win32com.client.Dispatch("Word.Application")
#WordApp.Visible = False for i in xrange(0,len(df)):
Pn = df.iloc[i,0].encode('utf-8')
partno = df.iloc[i,1].encode('utf-8')
manufacturer = df.iloc[i,2]
quantity = str(int(df.iloc[i,3]))
contractnum = df.iloc[i,4].encode('utf-8')
#print type(contractnum)
#print manufacturer
doc=WordApp.Documents.Add()
doc = WordApp.Documents.Open(r'C:\Users\Administrator\Desktop\b.docx')
doc.PageSetup.PageWidth = 9*28.35
doc.PageSetup.PageHeight = 13*28.35
doc.PageSetup.LeftMargin = 0.6*28.35
doc.PageSetup.RightMargin = 0.5*28.35 sel = WordApp.Selection
sel.Font.Name = "宋体"
sel.Font.Size = 11
sel.TypeText("\n")
sel.TypeText("\n")
sel.TypeText("\n")
sel.TypeText("\n")
sel.TypeText("\n")
sel.TypeText("\n")
sel.TypeText("\n")
tab=doc.Tables.Add(sel.Range, 7, 2)
#print type(tab.location)
tab.Style = "网格型".decode('utf-8')
tab.Columns(1).SetWidth(2.4*28.35, 0)
tab.Columns(2).SetWidth(5.5*28.35, 0)
line_cells = tab.columns[0].cells
line_cells[0].Range.Text= 'N'
line_cells[1].Range.Text = '号'.decode('utf-8')
line_cells[2].Range.Text = '牌'.decode('utf-8')
line_cells[3].Range.Text = '数量'.decode('utf-8')
line_cells[4].Range.Text = '日期'.decode('utf-8')
line_cells[5].Range.Text = '名称'.decode('utf-8')
line_cells[6].Range.Text = '编号'.decode('utf-8')
#print help(doc.SaveAs)
doc.Save
print 'Is oK!'
#doc.SaveAs(r'C:\Users\Administrator\Desktop\b.docx')
doc.Close()
WordApp.Quit()
if __name__ == '__main__':
parser()

这里主要注意下下操作world程序和for循环的位置就可以了,还有close,不然你的程序就会报错,因为你打开一个world程序未关闭,再次打开windows会提示未保存文档不可操作,所以程序会报错!

更多技术信息添加群:607021567

Python文本数据互相转换(pandas and win32com)的更多相关文章

  1. python读取数据文件:pandas包详解

    本文转载自https://blog.csdn.net/brucewong0516/article/details/79092579 pandas包是一个高效的文件读取工具,适用于txt,excel,等 ...

  2. python json数据的转换

    1  Python数据转json字符串 import json json_str = json.dumps(py_data) 参数解析: json_str = json.dumps(py_data,s ...

  3. python之数据序列转换并同时计算数据

    问题 你需要在数据序列上执行聚集函数(比如 sum() , min() , max() ), 但是首先你需要先转换或者过滤数据 解决方案 一个非常优雅的方式去结合数据计算与转换就是使用一个生成器表达式 ...

  4. python进行数据清理之pandas中的drop用法

    好久好久没有更新博客了,之前自学的估计也都忘记差不多了.由于毕业选择从事的行业与自己的兴趣爱好完全两条路,心情也难过了很久,既然入职了就要好好干,仍要保持自己的兴趣,利用业余时间重拾之前的乐趣. 从基 ...

  5. python 爬虫数据时间转换格式

    from datetime import datetimea = '2018/9/18 10/10'print(datetime.strptime(a,'%Y/%m/%d %H/%M'))>&g ...

  6. Python之数据规整化:清理、转换、合并、重塑

    Python之数据规整化:清理.转换.合并.重塑 1. 合并数据集 pandas.merge可根据一个或者多个不同DataFrame中的行连接起来. pandas.concat可以沿着一条轴将多个对象 ...

  7. 【python cookbook】【数据结构与算法】19.同时对数据做转换和换算

    问题:我们需要调用一个换算函数(例如sum().min().max()),但是首先需对数据做转换或者筛选处理 解决方案:非常优雅的方法---在函数参数中使用生成器表达式 例如: # 计算平方和 num ...

  8. [Python] 糗事百科文本数据的抓取

    [Python] 糗事百科文本数据的抓取 源码 https://github.com/YouXianMing/QiuShiBaiKeText import sqlite3 import time im ...

  9. python文本 字符与字符值转换

    python文本 字符与字符值转换 场景: 将字符转换成ascii或者unicode编码 在转换过程中,注意使用ord和chr方法 >>> print(ord('a'))    97 ...

随机推荐

  1. Fisher–Yates shuffle 洗牌算法

    Fisher-Yates shuffle 是一种生成有限序列的随机排列的算法--简单地说,该算法可以对序列进行混排.本人能力有限,且懒.不会扒论文去研究该算法在数学上的证明,只能抄袭网上的博客总结一遍 ...

  2. C++ 使用 hiredis 封装redis 的数据获取接口

    整合自互联网 一.hiredis 类库的安装 tar -zxvf hiredis-v0.13.3.tar.gz make make install mkdir /usr/lib/hiredis cp ...

  3. Git是什么、Git的功能、为什么versioncontrol用Git、Git的常用命令、Git的优缺点

    Git是什么 git是目前世界上最先进的分布式版本控制系统(没有之一). Git是用于 Linux内核开发的版本控制工具.与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版 ...

  4. aizhan爱站关键字采集

    功能:支持批量网站查询,支持登录后查询,支持批量导出txt http://blog.ddian.cn/content/uploadfile/201402/dc5c501411f758849b09c09 ...

  5. 2018-2019-2 网络对抗技术 20162329 Exp1 PC平台逆向破解

    目录 1.实践目标 2.实验内容 2.1 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 2.2 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getS ...

  6. BZOJ1757 : Apple 偷苹果

    设$f0[i][j][x][y][S]$表示盗贼位于$(i,j)$,守卫位于$(x,y)$,每棵苹果树苹果数量为$S$,盗贼先手时盗贼还能偷多少苹果. 设$f1[i][j][x][y][S]$表示盗贼 ...

  7. NOIP-比例简化

    题目描述 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有 1498 人,反对的有 902 人,那么赞同与反对的比例可以简单的记为 1498:902 . ...

  8. .NET题目(收集来自网络)

    1: .NET和c#有什么区别? 答: .NET一般是指.NET FrameWork框架,是一种平台,一种技术 c#是一种编程语言,是可以基于.NET平台的应用 2: c#中的委托是什么?事件是不是一 ...

  9. vue.js数据可以在页面上渲染成功却总是警告提示某个字段“undefined”未定义

    最近在开发公司的一个后端管理系统,用的是比较流行的vue框架.在开发过程中,总是出现各种各样的报错问题,有警告的,有接口不通的,有自己马虎造成的低级错误的等等,这些错误在一些老司机面前分分钟解决,但今 ...

  10. docker 数据卷管理

    在生产环境中使用docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这涉及到容器对数据管理的操作 容器对数据的管理主要有两种方式: 数据卷(Data Volumes): 容器内 ...