python在对比两个文件内容或字符串时,要注意文件是否有换行符,否则结果会一直提示错误。

#python 3.x
#python 对比两个文件内容

with open('test1.txt') as file1,\
        open('test2.txt') as file2:
    fa = file1.readlines()
    fb = file2.readlines()
    for m in fa:
        m = m.rstrip('\n')
        for n in fb:
            if m not in n:
                print(m +'not in '+n )
                flag = 1
            else:
                print(m +'YES')
                flag = -1
    if flag==1:
        print('数据存在差异')

此外,判断一个字符串是否包含子串的其他几种方法有:
1)使用 in 方法
2)使用string模块的find()/rfind()方法
3)使用string模块的index()/rindex()方法
具体查看:http://www.jb51.net/article/62726.htm

这就让我纳闷了很久了,我搞了一晚上了,现在都1点半了,可是每个文件进行对比的话,是很麻烦的,因为in 和 not in,都不能准确算出我需要的内容,而且find的方式其实和in没什么区别。最后附上我自己的代码
#encoding:gbk
bj = ['项雨泽','黄皓翔','廖羽良','袁雨辰','杨宇轩','廖思凯','简博成','伍依铭','钟佳婷','陈欣怡','伍宇乐','周佳慧','熊子嫣','黄宇泉','刘思琦','刘晨宇','陈可佳','牛艺涵','伍妙思','钟艺轩','彭紫夏','黄育宸','刘子渊','肖哲浩','林弈名','严恺昕','刘子文','郭雨辰','钟瑞秋','刘俊佑','林颖希','黄佳敏','梁镇南','闻怡航','林涵羽']
with open('交作业成员.txt',encoding="utf-8") as file2:
cy = file2.readlines()
    for c in cy:
#      print(c +'交了作业' )
#  else:
#      pass
#
#bj.remove(b)


#print(bj)
    for b in bj:
        for c in cy:
            if c.find(b) == -1:
                pass
                print(b +'没交作业')
            else:
                pass
                #print(b +'交了作业')

一言难尽,明天继续,太久没摸了。
还有一段find的

`方法1:使用 in 方法实现contains的功能:

site = '//www.jb51.net/'
if "jb51" in site:
print('site contains jb51')
输出结果:site contains jb51

方法2:使用find函数实现contains的功能

s = "This be a string"
if s.find("is") == -1:
print "No 'is' here!"
else:
print "Found 'is' in the string."

希望本文所述对大家的Python程序设计有所帮助。`

经过一天的努力,总算在第二天中午完成了两个比较完美的程序,一个是需要读取txt文档进行比对,还有一个是利用while语法不断的读取输入的内容和列表内的成员进行比对,虽然第二个方法好像比较好,可是我还是喜欢第一个哈。

#encoding:gbk
bj = ['项雨泽','黄皓翔','廖羽良','袁雨辰','杨宇轩','廖思凯','简博成','伍依铭','钟佳婷','陈欣怡','伍宇乐','周佳慧','熊子嫣','黄宇泉','刘思琦','刘晨宇','陈可佳','牛艺涵','伍妙思','钟艺轩','彭紫夏','黄育宸','刘子渊','肖哲浩','林弈名','严恺昕','刘子文','郭雨辰','钟瑞秋','刘俊佑','林颖希','黄佳敏','梁镇南','闻怡航','林涵羽']
with open('交作业成员.txt',encoding="utf-8") as file2:
    cy = file2.read()
    for b in bj:
        if b not in cy:
            print(b +'没交作业')
        else:
            pass
                #print(b +'交了作业')
    print("===============所有内容检测完毕==============")

input()

上面这一段呢,是需要读取一个交作业成员.txt来进行和bj这个列表比对的,比较稳定,目前还没出过什么问题,还是比较好用的.
接下来下边这一个,是可以直接复制黏贴进来使用的,会方便一些.
要知道,这里使用while,完全是因为在python里,input就是读取你的输入,和c语言的cin是一样的,但是python在input的时候,遇到换行符是自动结束的,所以必须使用while语句来不断的读取所有的内容,因为家长在微信群是接龙形式报告作业的完成度的,完成的就接龙,没写的就不接龙,所以直接复制粘贴进来,然后输入ok并回车,程序就继续执行下一步,进行比对,用班级人员的姓名一个一个去匹配输入的接龙名字,如果遇到有这个名字就pass,如果没有,就提示该单位未交作业。
而上一个程序是read()直接读取文本文档,这里要注意,不是用readlines(),我在这里被坑了蛮久。

#encoding:gbk

bj = ['项雨泽','黄皓翔','廖羽良','袁雨辰','杨宇轩','廖思凯','简博成','伍依铭','钟佳婷','陈欣怡','伍宇乐','周佳慧','熊子嫣','黄宇泉','刘思琦','刘晨宇','陈可佳','牛艺涵','伍妙思','钟艺轩','彭紫夏','黄育宸','刘子渊','肖哲浩','林弈名','严恺昕','刘子文','郭雨辰','钟瑞秋','刘俊佑','林颖希','黄佳敏','梁镇南','闻怡航','林涵羽']
zy = ""
while True:
    cy = input("请输入今日名单: ")
    if cy != "ok":
        zy += cy
    else:
        break

#print(zy)

for b in bj:
    if b not in zy:
        print(b +'没交作业')
    else:
        pass
                #print(b +'交了作业')
print("===============所有内容检测完毕==============")

input()

以下为2020年3月10日添加了一个统计,统计没交作业有多少人

#encoding:gbk

bj = ['项雨泽','黄皓翔','廖羽良','袁雨辰','杨宇轩','廖思凯','简博成','伍依铭','钟佳婷','陈欣怡','伍宇乐','周佳慧','熊子嫣','黄宇泉','刘思琦','刘晨宇','陈可佳','牛艺涵','伍妙思','钟艺轩','彭紫夏','黄育宸','刘子渊','肖哲浩','林弈名','严恺昕','刘子文','郭雨辰','钟瑞秋','刘俊佑','林颖希','黄佳敏','梁镇楠','闻怡航','林涵羽']
zy = ""
num = 0
while True:
    cy = input("请输入今日名单: ")
    if cy != "ok":
        zy += cy
    else:
        break

#print(zy)

for b in bj:
    if b not in zy:
        print(b +'没交作业')
        num+=1
    else:
        pass
                #print(b +'交了作业')
print("===============共计" + str(num) + "人没交作业.==============")

input()

最后修改:2022 年 12 月 05 日
如果觉得我的文章对你有用,请随意赞赏