比较python中的两个文本文件

时间:2013-12-03 02:05:10

标签: python

我正在尝试与文本文件进行比较,并在第三个文件中输出相同的内容,但它不起作用 这两个文件有六行 ,第一个是这样的

name 50 60 77 88
name 33 55 76 45
name 22 43 65 87
name 44 65 87 90
name 54 07 67 08

第二个就像

name 77 32.88
name 86  66.9
name 55  34.8
name 34  88.9
name 42  77.6
name 22  65.9

我想匹配名称以获取其他信息

这是我做的事情

file1 = open("file1.txt", "r")
file2 = open("file2.txt", "r")
file3 = open("resultss.txt", "w")
list1 = file1.readlines()
list2 = file2.readlines()
file3.write("here: \n")
for i in list1:
    for j in list2:
        if  i==j:
            file3.write(i)

3 个答案:

答案 0 :(得分:3)

查看标准库中的difflib模块(更具体地说,difflib.unified_diff函数)。它为你完成所有的工作;)

答案 1 :(得分:0)

像其他人说的那样,你应该在使用它们之后关闭你的文件,这是一个很好的做法:

with open("filepath/file.txt", "r") as file1:
    some code here...

当'some code here'位完成时,这会自动为你关闭文件..

这是从文件中获取名称和信息的一种方法..使用re模块(正则表达式)

t1 = [i.split() for i in list1] #test this out in the interpreter if you don't know
t2 = [i.split() for i in list2] #what it does

r = []
for i in t1:
    for j in t2:
        if i[0] == j[0]:
        r.append('name: %s - grades: %s %s' % (i[0], ' '.join(i[1:]), ' '.join(j[1:])))

这将产生如下输出:

['name: nameb - grades: 50 60 77 88 34 88.9',
 'name: namek - grades: 33 55 76 45 22 65.9', 
 'name: namem - grades: 22 43 65 87 42 77.6', 
 'name: Garry - grades: 44 65 87 90 86 66.9', 
 'name: Brian - grades: 54 07 67 08 77 32.88']

你显然可以采用不同的格式

完整功能:

def compare_files():

    files = ["file1", "file2"]
    file_list = []

    for file in files:
        with open("filepath/%s.txt", % file "r") as f:
            file_list.append(f.readlines())

    text1 = [i.split() for i in file_list[0]]
    text2 = [i.split() for i in file_list[1]]

    r = []
    for i in text1:
        for j in text2:
            if i[0] == j[0]:
            r.append('name: %s - grades: %s %s' % (i[0], ' '.join(i[1:]), ' '.join(j[1:])))
    #if file f3 doesn't exist this will create it
    with open("filepath/file3.txt", "w") as f3:
        for line in r:
            f3.write(i + '\n')

答案 2 :(得分:0)

完成操作后应关闭文件。因此,您应该在代码的尾部添加以下代码:

file1.close()
file2.close()
file3.close()

我希望这对你有所帮助。