【问题标题】:how to compare every line from the middle of the line with every line in a single text file using python?如何使用python比较从行中间的每一行与单个文本文件中的每一行?
【发布时间】:2020-07-15 17:43:15
【问题描述】:

我是 python 的初学者,正在尝试编写一个脚本,在其中比较文本文件的行并打印唯一的行。 这是输入文件。 (我想比较(,)后面的数值后的每一行)

Hello world! 'I like scripting', 1: I am learning python.
Hello world! 'I like scripting',  1: I am learning perl.
Hello world! 'I like scripting', 1: I am learning both perl and python.
Hello all! 'I like scripting', 3: I am learning python.
Hello everyone! 'I like scripting', 5: I am learning perl.
Hai! 'I do not like scripting', 2: I am not learning either python or perl.

我正在尝试打印第 1 行(因为“Hello world!'我喜欢脚本'”涵盖了三种可能的情况,所以我只想打印一次)和第 6 行(因为它根本不重复,所以我想打印第 6 行)

应该打印(应该是输出文件)

Hello world! I like scripting 1 
Hai! I do not like scripting 2

我的工作还处于起步阶段

with open ('input.txt') as input, open ('output.txt', 'w') as output:
    for line in input:
        new_line = line.strip(', ')

我打开输入文件并尝试在 (, ) 之后剥离每一行以比较每一行。 我被困在这里。任何帮助将不胜感激。

【问题讨论】:

  • 您要比较的内容尚不清楚。您的第一个示例的输出是什么?
  • @zezollo 应该是:世界你好!我喜欢编写脚本 1 Hai!我不喜欢脚本 2
  • 好的,因此删除第 1 行和第 4 行,因为它们都以 I am learning python. 结尾,而第 2 和 5 行也被删除,因为它们都以 I am learning perl. 结尾。所以只剩下第 3 行和第 6 行,然后打印它们的开始。好的,所以,首先,你可能不想strip(),而是split() 每行。可能有更有效的方法来实现您想做的事情,但如果您正在学习,也许您还不想了解它们。
  • 另一个提示:不要使用input 作为变量,因为它是python 关键字。
  • 如果您确定每行两部分之间的分隔符始终是分号,您可以执行类似line_start, line_end = line.split(':')

标签: python-3.x


【解决方案1】:

一个简单的方法是使用字典和列表。 在这个解决方案中,我收集字典中的所有行,其值是行开始和行结束的键,如果已经收集了行结束,那么它是重复的,我将它保存到重复列表中。然后对于每个收集的密钥,如果它不在重复列表中,那么我将其写入输出文件。

#!/usr/bin/env python

collected = dict()
duplicates = list()
with open('input.txt') as infile, open('output.txt', 'w') as output:
    for line in infile:
        line_start, line_end = line.split(':')
        if line_end in collected:
            duplicates.append(line_end)
        else:
            collected[line_end] = line_start.split(', ')[0]
    for key in collected:
        if key not in duplicates:
            output.write(f'{collected[key]}\n')

我想有“更好”的解决方案,但找不到像这个一样可读和清晰的东西。

【讨论】:

    猜你喜欢
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 2012-09-25
    • 2021-03-11
    • 1970-01-01
    • 2015-12-31
    相关资源
    最近更新 更多