簡體   English   中英

如何比較來自不同文件夾的兩個文本文件?

[英]How do I compare two text files from different folders?

假設我有兩個文件夾,其中包含 1000 個文本文件,例如文件夾 1 和文件夾 2。

這兩個文件夾具有相同名稱的文本文件,例如:

folder 1: ab.txt,  bc.txt,  cd.txt, ac.txt, etc. 
folder 2:  ab.txt,  bc.txt,  cd.txt, ac.txt, etc. 

每個文本文件都包含一堆數字。 以下是文本文件中的文本示例,例如文件夾 1 中的 ab.txt 具有:

5 0.796 0.440 0.407 0.399
24 0.973 0.185 0.052 0.070
3 0.91 0.11 0.12 0.1

文件夾 2 中的 ab.txt 具有:

1 0.8 0.45 0.407 0.499
24 0.973 0.185 0.052 0.070
5 5.91 6.2 2.22 0.2

我想讀取這兩個文件夾中的文本文件,並比較每對具有相同名稱的文本文件的第一列(如上所示)。 例如,如果兩個文本文件的第一列有不同的數字,我想將它們從 folder_1 移動到另一個名為“輸出”的文件夾。 這是我寫的。 我可以比較兩個文本文件。 但是,我想知道如何比較位於兩個不同文件夾中的相似文本文件?

import difflib

with open(r'path to txt file\') as folder_1:
    file_1_text = file_1.readlines()

with open(r'r'path to txt file\'') as folder_2:
    file_2_text = file_2.readlines()

# Find and print the diff:
for line in difflib.unified_diff(
        file_1_text, file_2_text, fromfile='file1.txt',
        tofile='file2.txt', lineterm=''):
    print(line)```



您可以使用os.listdir()創建文件夾中所有文件的列表。

folder1_files = os.listdir(folder_path1)
folder2_files = os.listdir(folder_path2)

比您可以遍歷兩個列表並檢查文件名是否相等。

for file1 in folder1_files:
    for file2 in folder2_files:
        if file1 == file2:
            ...

比較第一行也不是那么困難。 閱讀兩個文件的行並檢查它們是否不同。

file1_path = os.path.join(folder_path1, file1)
file2_path = os.path.join(folder_path2, file2)
file1_file = open(file1_path, 'r')
file2_file = open(file2_path, 'r')
file1_lines = file1_file.readlines()
file2_lines = file2_file.readlines()
if file1_lines[0] != file2_lines[0]:
    ...

我會使用shutil.moveshutil.copy來移動/復制文件。

shutil.copy(file1_path, "output/" + file1)

關閉文件描述符

file1_file.close()
file2_file.close()

一起在 function 中:

def compare_files(folder_path1, folder_path2):
    import os
    import shutil
    folder1_files = os.listdir(folder_path1)
    folder2_files = os.listdir(folder_path2)
    for file1 in folder1_files:
        for file2 in folder2_files:
            if file1 == file2:
                file1_path = os.path.join(folder_path1, file1)
                file2_path = os.path.join(folder_path2, file2)
                file1_file = open(file1_path, 'r')
                file2_file = open(file2_path, 'r')
                file1_lines = file1_file.readlines()
                file2_lines = file2_file.readlines()
                output_path = "output"
                if not os.path.exists(output_path):
                    os.makedirs(output_path)
                if file1_lines[0] != file2_lines[0]:
                    shutil.copy(file1_path, output_path + "/" + file1)
                file1_file.close()
                file2_file.close()

compare_files("folder1", "folder2")

如果您想比較數字,例如1應該與1.0相同,您可以執行以下操作。

l1 = file1_lines[0].split()
l2 = file2_lines[0].split()
for i in range(len(l1 if len(l1) < len(l2) else l2)):
    if float(l1[i]) != float(l2[i]):
        output_path = "output"
        if not os.path.exists(output_path):
            os.makedirs(output_path)
        shutil.copy(file1_path, output_path)
        break

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM