python合并word全部_python:怎样合并文档中有重复部分的行?
說明一下這個代碼所有的考量.
首先是 順序,這裡的順序有兩個部分,一個是輸出行的順序,一個是項目合併之後的順序.我們觀察到:
pr333 sd23a2 thisisa 1001 1005
pr333 sd23a2 sentence 1001 1005
pr33w sd11aa we 1022 1002
pr33w sd11aa have 1022 1002
pr33w sd11aa adream 1033 1002
要變成:
pr333 sd23a2 thisisa|sentence 1001 1005
pr33w sd11aa we|have|adream 1022|1033 1002
輸出行的順序要顧及: pr333 先於 pr33w
項目合併之後的順序要顧及: thisisa 先於 sentence
這代表我們 使用的資料型態必須要能維持順序
其次是速度,我們都知道序列型態是線性搜尋,為了效率,使用映射型態是比較好的.
三種考量之下,就如同 moling3650 大所言,OrderedDict 是個好選擇.這可以解決行輸出的問題,不過合併項目由於只需要用到 key 而不需要用到 value 所以使用 OrderedDict 有點可惜,不過目前標準庫中沒有 OrderSet 的選擇,所以只好將就著用一下.
有關於 OrderedDict 可以參閱 OrderedDict
最後 linkse7en 大的觀點非常好,這類文檔處理的問題,如果能夠邊讀邊寫,邊讀邊處理絕對是 有效率(因為只需要進行一次文檔的走訪)(討論請見評論部分 moling 大的觀點) 且 省資源(馬上輸出完畢,不必浪費空間儲存資料).但因為考慮到有可能重複的 數據對 有可能跨行出現,所以依然是多花一點資源來確保穩固性.
代碼(Python3):
from collections import OrderedDict
data = OrderedDict()
DPAIR = slice(0,2)
MSG = slice(2,None)
with open('data.txt', 'r') as reader:
for line in reader:
line = line.strip()
items = tuple(line.split())
msgs = data.setdefault(items[DPAIR], [OrderedDict({}) for msg in items[MSG]])
for idx, msg in enumerate(msgs):
msg.setdefault(items[MSG][idx], None)
for (dp1, dp2), msgs in data.items():
print(dp1, dp2, *['|'.join(msg.keys()) for msg in msgs])
關於代碼部分也做個說明(也許我寫的不是最好,但有些心得可以分享).
首先是 slice 類的應用.
身為一個 Python programmer,我們對 序列型態 取切片(slicing) 應該都不陌生.
items[start:stop:step]
其實可以寫成:
items[slice(start, stop, step)]
# example
items[:5] 可以寫成 items[slice(0,5)]
items[7:] 可以寫成 items[slice(7,None)]
那好處是什麼呢?
我們可以利用這個特性對切片進行命名,以這個問題的代碼為例,原本要取出 數據對 與 其他資料 可以用:
items = tuple(line.split())
items[0:2] # 這是用來做 key 的數據對
items[2:] # 這是其他的資料項
但是這種方式其實閱讀起來不夠清晰,我們可以幫這兩個範圍取個名字,所以:
DPAIR = slice(0,2)
MSG = slice(2,None)
items[DPAIR] # 這是用來做 key 的數據對
items[MSG] # 這是其他的資料項
我們可以用比較優雅易讀的方式來從 items 中取值.
其次是 setdefault,這個函數相當實用,舉例:
dic.setdefault(key, default_value)
如果字典(或其他相符的映射型態)中存在鍵值 key 則回傳 dic[key] 否則回傳自動在字典中插入新的鍵值對 dic[key] = default_value 並且回傳 default_value.
最後一個想分享的是嵌套 tuple 的拆解:
for (a, b), c, d in ((1,2) ,3, 4):
print(a, b, c, d) # 印出 1 2 3 4
這個技巧可以很方便的用來拆解巢狀嵌套的 tuple.
感謝大家不嫌我話多...
python合并word全部_python:怎样合并文档中有重复部分的行?相关推荐
- python合并word内容相同单元格_python:怎样合并文档中有重复部分的行?
說明一下這個代碼所有的考量. 首先是 順序,這裡的順序有兩個部分,一個是輸出行的順序,一個是項目合併之後的順序.我們觀察到: pr333 sd23a2 thisisa 1001 1005 pr333 ...
- python 合并word内容_python如何合并两个文档内容
1.两个文档合并之前 2.合并两个文件的代码:file1 = open("name,tel.txt", "rb") file2 = open("nam ...
- python docx 提取图片_Python提取docx文档中所有嵌入式图片和浮动图片
术语: 浮动图片,是指在Word文档中位置可以自由移动.可以环绕文字或放置于文字上方.下方的图片,不占文档流的位置,可以和文字或嵌入式图片重叠. 嵌入式图片或行内图片,和文档中的文字一样占文档流的位置 ...
- python改word域_Python自动化修改word实例
前言 利用Python docx模块,可以很方便地打开和修改Word 2007及以后的文档.本文简单地介绍了如何使用python修改word文档中的内容. 例子与代码 word文档的内容是一封表扬信, ...
- java计算机毕业设计酒店后厨供应商订单合并系统源码+数据库+lw文档+系统
java计算机毕业设计酒店后厨供应商订单合并系统源码+数据库+lw文档+系统 java计算机毕业设计酒店后厨供应商订单合并系统源码+数据库+lw文档+系统 本源码技术栈: 项目架构:B/S架构 开发语 ...
- python读取docx中表格 图片_python 解析docx文档的方法,以及提取插入的文本对象和图片...
首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. ...
- java计算机毕业设计酒店后厨供应商订单合并系统源程序+mysql+系统+lw文档+远程调试
java计算机毕业设计酒店后厨供应商订单合并系统源程序+mysql+系统+lw文档+远程调试 java计算机毕业设计酒店后厨供应商订单合并系统源程序+mysql+系统+lw文档+远程调试 本源码技术栈 ...
- Python量化交易平台:JQData | API使用文档(转)
Python量化交易平台:JQData | API使用文档(转) #原文地址:https://www.joinquant.com/help/api/help?name=JQData JQData说明书 ...
- java操作office和pdf文件java读取word,excel和pdf文档内容
在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...
最新文章
- linux grep 例子,Linux中Grep常用的15个例子
- C语言函数sscanf:从一个字符串中读进与指定格式相符的数据
- python制作一个教学网站_小白如何入门Python? 制作一个网站为例
- c++ 动态规划(数塔)
- scrapy爬取百万小说
- Cortex-M3-复位(序列)
- 2020教育OMO模式落地应用研究报告
- el-table 树形表格 自定义展开图标_实践一个树形组件
- SAP License:SAP Business One系统功能
- 借一本可以编辑HTML,index.html
- 基于Matlab----16QAM调制与解调
- Java并发编程学习笔记(一)线程安全性 1
- android 程序员 计算器,程序员计算器(进制转换)
- CTF常见的php函数
- 如何在线制作二维码?学校通知二维码的3种制作方法
- jsp外文期刊免费下载_外文期刊下载
- 极简之SVN使用,入职必备
- 勒索病毒解密SQL数据库修复文档文件服务器中毒远程处理数据恢
- 广东省中医院微信公众号医保个账支付功能
- 直击GITC2018 尚德机构苏万松:从消费互联网到产业互联网
热门文章
- oracle静默安装访问数据库慢,Oracle数据库静默安装总结
- win2003 apache php5.4 mysql_【php】在Windows2003下配置Apache2.4与php5.4
- 错误诊断:索引数据错误导致ORA-00600 [kdsgrp1]处理
- Oracle绑定变量和审计功能影响性能吗?Python告诉你
- 直播丨分布式数据库:从PG-XL到TBASE
- 案例详解:MTU不一致导致主机和RAC不断重启
- Cloudarrow V2.0 正式发布!
- 毫秒级从百亿大表任意维度筛选数据,是怎么做到的…
- [技术分享]【DLI跨源】当DLI遇见MongoDB
- Python精确指南——第二章 界面开发