用 ID 替换较大文件中的行

replace lines in a larger file with ID

大家好,我在用相同的 ID 替换相同的内容行时遇到了问题 e.x:

ONE -----------> 1
TWO -----------> 2
THREE-----------> 3
HELLO-----------> 4
SEVEN-----------> 5
ONE-----------> 1
ONE-----------> 1
ONE-----------> 1
TWO-----------> 2

我已经处理了下面这段代码,但没有结果: 注意:filein 和 file2 具有与定义示例相同的值。

# opening the file in read mode
file = open("filein.txt", "r")
# opening the file in read and write mod
file2 = open("filein2.txt", "r+")
replacement = ""
count=1
# using the for loop
for line in file:
 for line2 in file2:
  line = line.strip()
  if line == line2 :
   changes = line.replace(line, str(count))
   replacement = replacement + changes + "\n"
 file2.seek(0)
 file2.write(replacement)
 count=count+1
file.close() 

filein 和 filein2 包含相同的值

ONE 
TWO
THREE
HELLO
SEVEN
ONE
ONE
ONE
TWO

如果您想让每个唯一的单词都有一个唯一的 ID,您可以使用字典:

inputText = "ONE TWO THREE HELLO SEVEN ONE ONE ONE TWO"

indexDictionary = {}
count = 1

outList = []

for word in inputText.split(" "):
    if word not in indexDictionary.keys():
        indexDictionary[word] = count
        count += 1
    outList.append(indexDictionary[word])

print(outList)
print(indexDictionary)

据我了解,这就是您想要的;逐行比较两个文件,如果对应的行相等,则为它们分配一个 ID,如果这些行在文件中的其他地方重复,则分配与之前相同的 ID,如果这些行没有出现,则分配一个新的 ID。如果行不同,则获取它们的内容。最后将 ID 或行内容写入新文件:

index_dct = dict()
id_ = 1

with open('text.txt') as f1, open('text1.txt') as f2, open('result.txt', 'w') as result:
    for line1, line2 in zip(f1, f2):
        line1, line2 = line1.strip(), line2.strip()
        if line1 == line2:
            text = index_dct.get(line1)
            if text is None:
                text = index_dct[line1] = id_
                id_ += 1
        else:
            text = f'{line1} {line2}'
        result.write(f'{text}\n')

快速了解其工作原理:

首先你有一个字典来存储值及其对应的 ID,这样如果一个值重复你可以分配相同的 ID。

然后使用上下文管理器 (with) 打开三个文件:
然后使用 zip 同时遍历前两个文件并比较行是否匹配,如果匹配则首先尝试根据它们的值获取相应的 ID,如果在dictionary 将当前行的值作为键值,并将其值作为 ID,然后将 ID 加一。
如果行不匹配,则将它们连接在一起[=13​​=]

最后将结果值写入第三个文件