使用Python在两个文本文件的段落中查找重复的关键字,并在新的文本文件中列出结果(比较它们)
我正在尝试创建一个代码(它还没有完成,因为我不知道如何进行-我是编程的初学者),可以在段落中找到重复的关键字,并在新的文本文件中比较这些段落。以下是文本文件内容的示例:使用Python在两个文本文件的段落中查找重复的关键字,并在新的文本文件中列出结果(比较它们),python,regex,duplicates,compare,Python,Regex,Duplicates,Compare,我正在尝试创建一个代码(它还没有完成,因为我不知道如何进行-我是编程的初学者),可以在段落中找到重复的关键字,并在新的文本文件中比较这些段落。以下是文本文件内容的示例: ------------------------------------------------------------------ File Creation Date: September 07, 2004 Identifier #: hf8594.tif Image
------------------------------------------------------------------
File Creation Date: September 07, 2004
Identifier #: hf8594.tif
Image Pixels (meters): 1.25
Format: 8 bit TIFF
------------------------------------------------------------------
File Creation Date: December 13, 2004
Identifier #: ha8421.tif
Image Pixels (meters): 5.25
Format: 8 bit TIFF
------------------------------------------------------------------
每个文本文件包含大约200个段落,并且两个文件中的一些标识符
是相同的。我的目标是在两个文本文件中找到相同的标识符,并比较新文本文件中的文件创建日期、图像像素(米)和格式
(所有行都用连字符分隔)(或者excel工作表可能更好,因为有列)
这是我的代码草案
# importing a library
import re
file1=open("file1.txt","r")
file2=open("file2.txt","r")
list1 = file1.readlines()
list2 = file2.readlines()
paragraph_sep = "------------------------------------------------------------------\n"
paragraphs = paragraph_str.split(paragraph_sep)[1:]
s = 'Identifier #: ha8421.tif'
comp = re.compile("Identifier #: \s* (.*tif)")
a = re.search(comp, s)
a.groups()
=> ('ha8421.tif',)
def get_id_from_string(s):
ids = re.search(comp, s)
return ids[0]
我试图识别用于查找重复项的关键字(在本例中为something.tif
——这就是我使用regex的原因),并根据分隔符(连字符)设置每个段落。这是我想要得到的输出,在txt文件中可能是这样的:
------------------------------------------------------------------
file1.txt
File Creation Date: September 07, 2004
Identifier #: hf8594.tif
Image Pixels (meters): 1.25
Format: 8 bit TIFF
------------------------------------------------------------------
file2.txt
File Creation Date: December 01, 2004
Identifier #: hf8594.tif
Image Pixels (meters): 1.30
Format: 8 bit TIFF
------------------------------------------------------------------
或者理想情况下在excel工作表中,因此结果将拆分为列-例如:
file1.txt file2.txt
File Creation Date: September 07, 2004 December 01, 2004
Identifier #: hf8594.tif hf8594.tif
Image Pixels (meters): 1.25 1.30
Format: 8 bit TIFF 8 bit TIFF
好的,假设你有一些字符串
L:hhtk\hf8594.txt
File Creation Date: December 01, 2004
Identifier #: hf8594.tif
Image Pixels (meters): 1.30
Format: 8 bit TIFF
(也有新的线路)
您可以使用如下正则表达式获取标识符:
def get_id(parastr):
a = re.search(ur'(?<=Identifier #:)(?:\s*)(?P<id>\S*)(?=\n)', paragraphstr)
return a.group('id')
def get_id(parastr):
a=re.search(ur’(?您可以用每个文件构造一个dict:
with open(fn) as f1:
di={}
for block in re.finditer(r'^[-]{60,}\n(.*?)(?=^[-]{60,}|\Z)', f1.read(), re.S | re.M):
d={k:v.strip() for k, v in [b.split(':') for b in block.group(1).strip().splitlines()]}
di[d['Identifier #']]=[d.get(k) for k in ('File Creation Date', 'Image Pixels (meters)', 'Format')]
>>> di
{'hf8594.tif': ['September 07, 2004', '1.25', '8 bit TIFF'], 'ha8421.tif': ['December 13, 2004', '5.25', '8 bit TIFF']}
然后使用这两个字典将每个列表与键控ID进行比较。这假设文件条目是一致的。我的完全不使用正则表达式的解决方案…因为正则表达式很酷,但太多了…你会发胖
from collections import defaultdict
separator = '------------------------------------------------------------------'
files = ["file1.txt","file2.txt"]
images = defaultdict(list)
for file in files:
with open(file) as f:
data = [item.strip() for item in f.read().strip().split(separator) if item.strip()]
for item in data:
fcd, id, ip, fmt = [line.strip() for line in item.split("\n")]
images[id.split(":")[1].strip()].append([file, fcd, id, ip, fmt])
with open("duplicates.txt", "w") as f:
for id in images:
if len(images[id]) > 1:
f.write(separator + "\n")
for duplicate in images[id]:
f.write("{}\n\n{}\n{}\n{}\n{}\n\n".format(*duplicate))
f.write(separator + "\n")
你能举一个你期望的输出的例子吗?好的,我更新了我的问题我也更新了文件名,所以现在应该更有意义了。