Txt文件python唯一值

时间:2017-07-14 08:44:38

标签: python pandas numpy text-files unique

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

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

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

2107:Business

2117: Art

2145: English

我试图用Python中的Pandas来做这件事,但真的无法解决任何问题。 有什么帮助表示赞赏吗?

编辑: 应该澄清一下。我不希望代码在第二个Art中读取。每个专业只有第一个宣言和学期。

3 个答案:

答案 0 :(得分:0)

假设l包含“像这样”的行:

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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)
相关问题