此脚本为了解决文件比对去重找不同的问题,此为原创。可以解决比对文件,并且输出文件2比文件1多的行数。比对以行为单位,分别作为函数的元素进行比对,充分应用了python中文件去重的问题。
import subprocess
def rd_a():
a=input('请输入你要比对的文件1及其绝对路径:')
result=subprocess.run('ls a',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
if True:
with open('a')as fobj:
s1=set(fobj)
return s1
else:
print('你所输入的文件不存在')
def rd_b():
b =input('请输入你要比对的文件2及其绝对路径:')
result = subprocess.run('ls b', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if True:
with open('b')as fobj:
s2 =set(fobj)
return s2
else:
print('你所输入的文件不存在')
def bdui_ab():
x=rd_a()
y=rd_b()
ab=y-x
print(ab)
def demo_info():
info='''
(0) 输入文件1: (1) 输入文件2: (2) 输出文件2比文件1多的行 (3) 退出
请输入0/1/2/3/ :'''
cmds = {'0': rd_a, '1': rd_b, '2': bdui_ab}
while True:
choice =input(info).strip()[0]
if choicenot in '0123':
print('请重新输入:')
continue
if choice =='3':
break
cmds[choice]()
if __name__ =='__main__':
demo_info()
此处举例说明: *特别说明,该脚本适用于linux环境下的文件比对。
文件1 /tmp/mima1
cat -n /tmp/mima1 #下方为文件内容
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 abrt:x:173:173::/etc/abrt:/sbin/nologin
18 libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
19 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
20 colord:x:997:996:User for colord:/var/lib/colord:/sbin/nologin
21 saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
22 rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
23 chrony:x:995:993::/var/lib/chrony:/sbin/nologin
24 qemu:x:107:107:qemu user:/:/sbin/nologin
25 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
26 usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
27 geoclue:x:994:991:User for geoclue:/var/lib/geoclue:/sbin/nologin
28 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
29 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
30 radvd:x:75:75:radvd user:/:/sbin/nologin
31 setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin
32 pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
33 gdm:x:42:42::/var/lib/gdm:/sbin/nologin
34 gnome-initial-setup:x:992:987::/run/gnome-initial-setup/:/sbin/nologin
35 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
36 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
37 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
38 ntp:x:38:38::/etc/ntp:/sbin/nologin
39 tcpdump:x:72:72::/:/sbin/nologin
40 fz:x:1000:1000:fz:/home/fz:/bin/bash
41 mm:x:1001:1001::/home/mm:/bin/bash
42 zhangsan:x:1002:1002::/home/zhangsan:/bin/bash
43 admin:x:1003:1003::/home/admin:/bin/bash
44 tom:x:1004:1004::/home/tom:/bin/bash
45 softadm:x:1005:1005::/home/softadm:/bin/bash
46 useradm:x:1006:1006::/home/useradm:/bin/bash
47 zengre:x:1007:1007::/home/zengre:/bin/bash
48 zengye:x:1008:1008::/home/zengye:/bin/bash
49 sssd:x:991:986:User for sssd:/:/sbin/nologin
50 jim:x:1009:1009::/home/jim:/bin/bash
51 kate:x:1010:1010::/home/kate:/bin/bash
52 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
53 usera:x:1011:1011::/home/usera:/bin/bash
54 userb:x:1012:1012::/home/userb:/bin/bash
55 zabbix:x:1013:1013::/home/zabbix:/sbin/nologin
56 mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
57 student:x:1014:1014::/home/student:/bin/bash
58 word:x:1015:1015::/home/word:/bin/bash
59 word1:x:1016:1016::/home/word1:/bin/bash
60 word2:x:1017:1017::/home/word2:/bin/bash
文件2为 /tmp/mima2
cat -n /tmp/mima2
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 abrt:x:173:173::/etc/abrt:/sbin/nologin
18 libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
19 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
20 colord:x:997:996:User for colord:/var/lib/colord:/sbin/nologin
21 saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
22 rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
23 chrony:x:995:993::/var/lib/chrony:/sbin/nologin
24 qemu:x:107:107:qemu user:/:/sbin/nologin
25 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
26 usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
27 geoclue:x:994:991:User for geoclue:/var/lib/geoclue:/sbin/nologin
28 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
29 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
30 radvd:x:75:75:radvd user:/:/sbin/nologin
31 setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin
32 pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
33 gdm:x:42:42::/var/lib/gdm:/sbin/nologin
34 gnome-initial-setup:x:992:987::/run/gnome-initial-setup/:/sbin/nologin
35 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
36 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
37 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
38 ntp:x:38:38::/etc/ntp:/sbin/nologin
39 tcpdump:x:72:72::/:/sbin/nologin
40 fz:x:1000:1000:fz:/home/fz:/bin/bash
41 mm:x:1001:1001::/home/mm:/bin/bash
42 zhangsan:x:1002:1002::/home/zhangsan:/bin/bash
43 admin:x:1003:1003::/home/admin:/bin/bash
44 tom:x:1004:1004::/home/tom:/bin/bash
45 softadm:x:1005:1005::/home/softadm:/bin/bash
46 useradm:x:1006:1006::/home/useradm:/bin/bash
47 zengre:x:1007:1007::/home/zengre:/bin/bash
48 zengye:x:1008:1008::/home/zengye:/bin/bash
49 sssd:x:991:986:User for sssd:/:/sbin/nologin
50 jim:x:1009:1009::/home/jim:/bin/bash
51 kate:x:1010:1010::/home/kate:/bin/bash
52 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
53 usera:x:1011:1011::/home/usera:/bin/bash
54 userb:x:1012:1012::/home/userb:/bin/bash
55 zabbix:x:1013:1013::/home/zabbix:/sbin/nologin
56 mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
57 student:x:1014:1014::/home/student:/bin/bash
58 word:x:1015:1015::/home/word:/bin/bash
59 word1:x:1016:1016::/home/word1:/bin/bash
60 word2:x:1017:1017::/home/word2:/bin/bash
61 zhangsan:x:1002:1002::/home/zhangsan:/bin/bash
62 admin:x:1003:1003::/home/admin:/bin/bash
63 tom:x:1004:1004::/home/tom:/bin/bash
64 softadm:x:1005:1005::/home/softadm:/bin/bash
65 useradm:x:1006:1006::/home/useradm:/bin/bash
66 zengre:x:1007:1007::/home/zengre:/bin/bash
67 zengye:x:1008:1008::/home/zengye:/bin/bash
68 sssd:x:991:986:User for sssd:/:/sbin/nologin
69 jim:x:1009:1009::/home/jim:/bin/bash
70 kate:x:1010:1010::/home/kate:/bin/bash
71 ss2 dsda
72 ss23d dsda
下方为执行效果:
[root@web1 py]# python3 bbfile.py
(0) 输入文件1:
(1) 输入文件2:
(2) 输出文件2比文件1多的行
(3) 退出
请输入0/1/2/3/ :0
请输入你要比对的文件1及其绝对路径:/tmp/mima1 #此处必要判断
(0) 输入文件1:
(1) 输入文件2:
(2) 输出文件2比文件1多的行
(3) 退出
请输入0/1/2/3/ :2
请输入你要比对的文件1及其绝对路径:/tmp/mima2
请输入你要比对的文件2及其绝对路径:/tmp/mima1
set() #由于 /tmp/mina1 是/tmp/mina2 的子集, 故此处输出为空
(0) 输入文件1:
(1) 输入文件2:
(2) 输出文件2比文件1多的行
(3) 退出
请输入0/1/2/3/ :2
请输入你要比对的文件1及其绝对路径:/tmp/mima1
请输入你要比对的文件2及其绝对路径:/tmp/mima2
{'ss2 dsda\n', 'ss23d dsda\n'} #去重后显示多的行
(0) 输入文件1:
(1) 输入文件2:
(2) 输出文件2比文件1多的行
(3) 退出
请输入0/1/2/3/ :3 #直接退出
网友评论