[英]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.move
或shutil.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.