difflibpython
① python 有没有一个模块可以比较两个文本文件内容差异的而且可以只输出差异的部分
difflib是python提供的比较序列(string list)差异的模块。实现了三个类:
1>SequenceMatcher 任意类型序列的比较 (可以比较字符串)
2>Differ 对字符串进行比较
3>HtmlDiff 将比较结果输出为html格式.
建议你使用SequenceMatcher比较器,给你个例子吧。
SequenceMatcher实例:
import difflib
from pprint import pprint
a = 'pythonclub.org is wonderful'
b = 'Pythonclub.org also wonderful'
s = difflib.SequenceMatcher(None, a, b)
print "s.get_matching_blocks():"
pprint(s.get_matching_blocks())
print "s.get_opcodes():"
for tag, i1, i2, j1, j2 in s.get_opcodes():
print ("%7s a[%d:%d] (%s) b[%d:%d] (%s)" % (tag, i1, i2, a[i1:i2], j1, j2, b[j1:j2]))
输出为:
s.get_matching_blocks():
[(1, 1, 14), (16, 17, 1), (17, 19, 10), (27, 29, 0)]
s.get_opcodes():
replace a[0:1] (p) b[0:1] (P)
equal a[1:15] (ythonclub.org ) b[1:15] (ythonclub.org )
replace a[15:16] (i) b[15:17] (al)
equal a[16:17] (s) b[17:18] (s)
insert a[17:17] () b[18:19] (o)
equal a[17:27] ( wonderful) b[19:29] ( wonderful)
SequeceMatcher(None,a,b)创建序列比较对象,将以a作为参考标准进行
Sequecematcher(None,b,a)创建序列比较对象,将以b作为参考标准进行
a,b表示待比较的两个序列,生成序列比较对象后,调用该对象的get_opcodes()方法,将返回一个元组(tag,i1,i2,j1,j2).tag表示序列分片的比较结果.i1,i2表示序列a的索引,j1,j2表示序列b的索引.
get_opcodes()返回元组(tag,i1,i2,j1,j2)的含义
② python中是否有用于计算两个字符串相似度的函数
linux环境下,没有首先安装python_Levenshtein,用法如下:
重点介绍几个该包中的几个计算字串相似度的几个函数实现。
1. Levenshtein.hamming(str1, str2)
计算汉明距离。要求str1和str2必须长度一致。是描述两个等长字串之间对应位置上不同字符的个数。如
2. Levenshtein.distance(str1, str2)
计算编辑距离(也成Levenshtein距离)。是描述由一个字串转化成另一个字串最少的操作次数,在其中的操作包括插入、删除、替换。如
算法实现 参考动态规划整理:http://www.cnblogs.com/kaituorensheng/archive/2013/05/15/3080990.html。
3. Levenshtein.ratio(str1, str2)
计算莱文斯坦比。计算公式 r = (sum - ldist) / sum, 其中sum是指str1 和 str2 字串的长度总和,ldist是类编辑距离
注意:这里的类编辑距离不是2中所说的编辑距离,2中三种操作中每个操作+1,而在此处,删除、插入依然+1,但是替换+2
这样设计的目的:ratio('a', 'c'),sum=2,按2中计算为(2-1)/2 = 0.5,’a','c'没有重合,显然不合算,但是替换操作+2,就可以解决这个问题。
4. Levenshtein.jaro(s1, s2)
计算jaro距离,
其中的m为s1, s2的匹配长度,当某位置的认为匹配 当该位置字符相同,或者在不超过
t是调换次数的一半
5. Levenshtein.jaro_winkler(s1, s2)
计算Jaro–Winkler距离
③ python怎么两两查找多个文件相同内容
可以用 difflib库,下面给一个例子,具体需求自己研究
假如在同一个目录下有a.txt, b.txt 两个文本文件
a.txt 内容是
aaa
bbb
b.txt内容是
aaa
ccc
import difflib
a = open('a.txt', 'U').readlines()
b = open('b.txt', 'U').readlines()
diff = difflib.ndiff(a, b)
sys.stdout.writelines(diff)
结果是:
aaa
- bbb+ ccc
④ 在python中一共有多少个标准库
Python 语言官方的参考手册钟,介绍了与 Python 一同发行的标准库。
文本处理服务
string--- 常见的字符串操作
re--- 正则表达式操作
difflib--- 计算差异的辅助工具
textwrap--- 文本自动换行与填充
unicodedata--- Unicode 数据库
stringprep--- 因特网字符串预备
readline--- GNU readline 接口
rlcompleter--- GNU readline 的补全函数
二进制数据服务
struct--- 将字节串解读为打包的二进制数据
codecs--- 编解码器注册和相关基类
数据类型
datetime--- 基本日期和时间类型
zoneinfo--- IANA 时区支持
calendar--- 日历相关函数
collections--- 容器数据类型
collections.abc--- 容器的抽象基类
heapq--- 堆队列算法
bisect--- 数组二分查找算法
array--- 高效的数值数组
weakref--- 弱引用
types--- 动态类型创建和内置类型名称
--- 浅层 (shallow) 和深层 (deep) 复制操作
pprint--- 数据美化输出
reprlib--- 另一种repr()实现
enum--- 对枚举的支持
graphlib--- 操作类似图的结构的功能
数字和数学模块
numbers--- 数字的抽象基类
math--- 数学函数
cmath--- 关于复数的数学函数
decimal--- 十进制定点和浮点运算
fractions--- 分数
random--- 生成伪随机数
statistics--- 数学统计函数
函数式编程模块
itertools--- 为高效循环而创建迭代器的函数
functools--- 高阶函数和可调用对象上的操作
operator--- 标准运算符替代函数
文件和目录访问
pathlib--- 面向对象的文件系统路径
os.path--- 常用路径操作
fileinput--- 迭代来自多个输入流的行
stat--- 解析stat()结果
filecmp--- 文件及目录的比较
tempfile--- 生成临时文件和目录
glob--- Unix 风格路径名模式扩展
fnmatch--- Unix 文件名模式匹配
linecache--- 随机读写文本行
shutil--- 高阶文件操作
数据持久化
pickle--- Python 对象序列化
reg--- 注册配合pickle模块使用的函数
shelve--- Python 对象持久化
marshal--- 内部 Python 对象序列化
dbm--- Unix "数据库" 接口
sqlite3--- SQLite 数据库 DB-API 2.0 接口模块
数据压缩和存档
zlib--- 与gzip兼容的压缩
gzip--- 对gzip格式的支持
bz2--- 对bzip2压缩算法的支持
lzma--- 用 LZMA 算法压缩
zipfile--- 使用ZIP存档
tarfile--- 读写tar归档文件
文件格式
csv--- CSV 文件读写
configparser--- 配置文件解析器
tomllib--- Parse TOML files
netrc--- netrc 文件处理
plistlib--- 生成与解析 Apple.plist文件
加密服务
hashlib--- 安全哈希与消息摘要
hmac--- 基于密钥的消息验证
secrets--- 生成管理密码的安全随机数
通用操作系统服务
os--- 多种操作系统接口
io--- 处理流的核心工具
time--- 时间的访问和转换
argparse--- 命令行选项、参数和子命令解析器
getopt--- C 风格的命令行选项解析器
logging--- Python 的日志记录工具
logging.config--- 日志记录配置
logging.handlers--- 日志处理程序
getpass--- 便携式密码输入工具
curses--- 终端字符单元显示的处理
curses.textpad--- 用于 curses 程序的文本输入控件
curses.ascii--- 用于 ASCII 字符的工具
curses.panel--- curses 的面板栈扩展
platform--- 获取底层平台的标识数据
errno--- 标准 errno 系统符号
ctypes--- Python 的外部函数库
并发执行
threading--- 基于线程的并行
multiprocessing--- 基于进程的并行
multiprocessing.shared_memory--- Shared memory for direct access across processes
concurrent包
concurrent.futures--- 启动并行任务
subprocess--- 子进程管理
sched--- 事件调度器
queue--- 一个同步的队列类
contextvars--- 上下文变量
_thread--- 底层多线程 API
网络和进程间通信
asyncio--- 异步 I/O
socket--- 底层网络接口
ssl--- 套接字对象的 TLS/SSL 包装器
select--- 等待 I/O 完成
selectors--- 高级 I/O 复用库
signal--- 设置异步事件处理程序
mmap--- 内存映射文件支持
互联网数据处理
email--- 电子邮件与 MIME 处理包
json--- JSON 编码和解码器
mailbox--- 操作多种格式的邮箱
mimetypes--- 映射文件名到 MIME 类型
base64--- Base16, Base32, Base64, Base85 数据编码
binascii--- 二进制和 ASCII 码互转
quopri--- 编码与解码经过 MIME 转码的可打印数据
结构化标记处理工具
html--- 超文本标记语言支持
html.parser--- 简单的 HTML 和 XHTML 解析器
html.entities--- HTML 一般实体的定义
XML处理模块
xml.etree.ElementTree--- ElementTree XML API
xml.dom--- 文档对象模型 API
xml.dom.minidom--- 最小化的 DOM 实现
xml.dom.pulldom--- 支持构建部分 DOM 树
xml.sax--- 支持 SAX2 解析器
xml.sax.handler--- SAX 处理句柄的基类
xml.sax.saxutils--- SAX 工具集
xml.sax.xmlreader--- 用于 XML 解析器的接口
xml.parsers.expat--- 使用 Expat 的快速 XML 解析
互联网协议和支持
webbrowser--- 方便的 Web 浏览器控制工具
wsgiref--- WSGI 工具和参考实现
urllib--- URL 处理模块
urllib.request--- 用于打开 URL 的可扩展库
urllib.response--- urllib 使用的 Response 类
urllib.parse用于解析 URL
urllib.error--- urllib.request 引发的异常类
urllib.robotparser--- robots.txt 语法分析程序
http--- HTTP 模块
http.client--- HTTP 协议客户端
ftplib--- FTP 协议客户端
poplib--- POP3 协议客户端
imaplib--- IMAP4 协议客户端
smtplib--- SMTP 协议客户端
uuid---RFC 4122定义的UUID对象
socketserver--- 用于网络服务器的框架
http.server--- HTTP 服务器
http.cookies--- HTTP状态管理
http.cookiejar—— HTTP 客户端的 Cookie 处理
xmlrpc--- XMLRPC 服务端与客户端模块
xmlrpc.client--- XML-RPC 客户端访问
xmlrpc.server--- 基本 XML-RPC 服务器
ipaddress--- IPv4/IPv6 操作库
多媒体服务
wave--- 读写WAV格式文件
colorsys--- 颜色系统间的转换
国际化
gettext--- 多语种国际化服务
locale--- 国际化服务
程序框架
turtle--- 海龟绘图
cmd--- 支持面向行的命令解释器
shlex—— 简单的词法分析
Tk图形用户界面(GUI)
tkinter—— Tcl/Tk 的 Python 接口
tkinter.colorchooser--- 颜色选择对话框
tkinter.font--- Tkinter 字体封装
Tkinter 对话框
tkinter.messagebox--- Tkinter 消息提示
tkinter.scrolledtext--- 滚动文字控件
tkinter.dnd--- 拖放操作支持
tkinter.ttk--- Tk 风格的控件
tkinter.tix--- TK扩展包
⑤ Python编程常用技巧
清理用户输入
对输入的的值进行清理处理,是常见的程序要求。比如要做大小写转化、要验证输入字符的注入,通常可以通过写正则用Regex来做专项任务。但是对于复杂的情况,可以用一些技巧,比如下面:
user_input = "This string has some whitespaces... "
character_map = {
ord(' ') : ' ',
ord(' ') : ' ',
ord(' ') : None
}
在此示例中,可以看到空格字符" "和" "都被替换为空格,而 " "被删除。
这是一个简单的示例,我们还可以使用unicodedata包和combinin()函数来生成大的映射表,以生成映射来替换字符串。
提示用户输入
命令行工具或脚本需要输入用户名和密码才能操作。要用这个功能,一个很有用的技巧是使用getpass模块:
import getpass
user = getpass.getuser()
password = getpass.getpass()
这三行代码就可以让我们优雅的交互提醒用户输入输入密码并捕获当前的系统用户和输入的密码,而且输入密码时候会自动屏蔽显示,以防止被人窃取。
查找字符串频率
如果需要使用查找类似于某些输入字符串的单词,可以使用difflib来实现:
import difflib
difflib.get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'], n=2)
# 返回['apple', 'ape']
difflib.get_close_matches会查找相似度最匹配的字串。本例中,第一个参数与第二个参数匹配。提供可选参数n,该参数指定要返回的最大匹配数,以及参数cutoff(默认值为0.6)设置为thr确定匹配字符串的分数。
关于Python编程常用技巧,青藤小编就和您分享到这里了。如果您对python编程有浓厚的兴趣,希望这篇文章可以为您提供帮助。如果您还想了解更多关于python编程的技巧及素材等内容,可以点击本站的其他文章进行学习。
⑥ python标准库有哪些
Python标准库的内容涵盖了非常多的功能,主要包括文件、字符串和数字处理,数据结构、网络编程、操作系统用户界面、网页测试、线程以及其它的工具。
具体有,1、文件操作相关的模块,os,os。
path,shutil,errno,stat,glob,fnmatch,tempfile等。
2、字符串和文本处理模块,string,re,difflib和textwrap等。
3、数据结构形式,collections,bisect,array,heapq,queue,struct和weakref等。
4、网络编程与操作系统,SocketServer,socket,selectselectors,threading,multiprocessing,subprocess,mmap,sched,asyncore等。
5、网页测试,urllib,扮态urllib2,配则httplib,ftplib,gopherlib,spider等。
6、解析和处理XML,HTMLParser,ElementTree,XMLParser,XMLWriter,SAX,minidom,expat等。
7、除此之厅卖源外,还包含一些其他方便实用的部分,如BaseHTTPServer,CGIHTTPServer,Cookie,templating,xmlrpclib,formatter,email等。
此外,Python还支持第三方库和框架,有很多实用的框架和工具可以让开发者高效、便捷地完成国家工作。
⑦ 如何找到适合需求的 Python 库
这是个很好的问题,Python 的标准库、第三方库那么多,怎么快速根据一个模糊的需求定位到自己需要的库呢?
直接答案,就是:Google。
-----------------------
下面讲讲理由吧。
awesome-python 系列确实大都是 Python 开源世界的精品,但是这样一个聚合的列表,乍一看都知道了,却很难在需要使用的时候快速定位上去。其实,awesome-python 系列可以作为你平时积累和学习的目录,但是,在要快速找到一个轮子造车的时候,还是 Google 更好用了。
比如,你想要用 Python 比较文本相似度,可以在 Google 搜索关键词“Python string similarity”。记住,搜索的时候用空格分隔几个关键词,不要写一句完整的话来做搜索。
在 Google 得到如下结果:
前三个答案的结果分别是 difflib(1, 3) 、FuzzyWuzzy (2),在第二个答案中,有这样一句话:
分别是不同版本的官方文档,里面有详细的示例代码可以参考。
-------------------------
除此之外,Python 官方文档中有一个“Python HOWTOs”系列,强烈建议每个 Python 开发者都认真学习一遍。要是你有足够的时间或者你有足够的热情,通读一次官方文档)当然是最好不过的了,尤其是“ The Python Standard Library ”这部分。
-------------------------
个人认为,通过 Google 搜索技术问题,最好的方式就是提到点上,不要长篇大论,不要使用问句句式,将问题归结为几个关键词再搜索,往往可以在较短时间里得到满意的回答。这不只限于 Python 常用库的搜索,也包括其它技术问题、其它语言甚至其它非技术问题,这样的搜索往往会更快得到你需要的。