【问题标题】:Txt file python unique valuestxt文件python唯一值
【发布时间】:2017-07-14 08:44:38
【问题描述】:

所以我有一个包含许多行的 txt 文件,如下所示:

2107|Business|2117|Art|2137|Art|2145|English

本质上,这是一个随机的学生专业,以及他们之前宣布的编码的学期和年份。我想要做的是在学期中阅读最初宣布的每个独特专业。从上面的行我需要:

2107:Business

2117: Art

2145: English

我试图用 Python 中的 Pandas 来做这件事,但真的什么都做不了。 任何帮助表示赞赏?

编辑: 应该澄清的。我不希望代码在 Art 的第二个实例中读取。每个专业只有第一个声明和之前的学期。

【问题讨论】:

  • 最终结果的类型是什么?只是字符串?
  • 字符串工作正常。我想要的最终结果是一个以加密的学生 ID 作为枢轴的数据透视表,下一列将是 3 行显示术语 ('2107','2117','2145') 和最后一列对应的每个学期每行的专业。
  • String 可能不是最好的选择。我想你会想要一个元组。这样数据更容易访问。不过,Blotosmetek 的回答应该不会太难调整以做到这一点,如果字符串对你有用,那么你就是金子。
  • 你能发布一部分文本文件和想要的输出吗?

标签: python pandas numpy text-files unique


【解决方案1】:

使用 Python 的 CSV 库来帮助将每一行拆分为一个单元格列表。然后,您可以使用 Python 的 grouper() 配方,该配方用于从列表中一次取出 n 项:

import csv
import itertools

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return itertools.izip_longest(fillvalue=fillvalue, *args)

seen = set()

with open('input3.txt', 'rb') as f_input:
    for row in csv.reader(f_input, delimiter='|'):
        for k, v in grouper(row, 2):
            if v not in seen:
                print "{}: {}".format(k, v)
                seen.add(v)

所以对于你的示例文件行,这会给你:

2107: Business
2117: Art
2145: English

【讨论】:

  • 这看起来不错,但有没有办法只读取 Art 的第一个实例?所以最终的输出是 2107:Business, 2117:Art, 2145:English。
  • 您可以将每个主题添加到一个集合中,并在打印前测试它是否在集合中。我已经相应地更新了脚本。
【解决方案2】:

假设l 包含一行“like this”:

a = l.split('|')
for t in zip(a[0::2], a[1::2]):
    print("{}: {}".format(*t))

【讨论】:

    【解决方案3】:

    您可以使用csv 模块来加载文件。例如:

    import csv
        with open('file.txt', 'rb') as f:
        reader = csv.reader(f, delimiter='|')
        for row in reader:
            print row
    

    现在您有一个列表row,其中包含文件中的所有内容。 row[n] 对于所有偶数 n 是一年/学期,对于所有奇数 n 是一个专业。

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      相关资源
      最近更新 更多