Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python在两个文本文件的段落中查找重复的关键字,并在新的文本文件中列出结果(比较它们)_Python_Regex_Duplicates_Compare - Fatal编程技术网

使用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")

你能举一个你期望的输出的例子吗?好的,我更新了我的问题我也更新了文件名,所以现在应该更有意义了。