Txt 文件 python 个唯一值

Txt file python unique values

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

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

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

2107:Business

2117: Art

2145: English

我试图在 Python 中使用 Pandas 执行此操作,但实际上什么也做不了。 感谢任何帮助?

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

假设 l 包含一行 "like this":

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

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

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

现在您有一个包含文件中所有内容的列表 rowrow[n] 对于 n 的所有偶数值是一个 year/semester 并且对于 n 的所有奇数值是一个主要的。

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