所以我有一个包含许多行的txt文件,如下所示:
2107|Business|2117|Art|2137|Art|2145|English
基本上,它是一个随机的学生专业和一个编码的学期和年份,他们在它之前宣布。我希望能够做的是在学期中阅读每个独特的专业最初被宣布。从上面的行我需要:
2107:Business
2117: Art
2145: English
我试图用Python中的Pandas来做这件事,但真的无法解决任何问题。 有什么帮助表示赞赏吗?
编辑: 应该澄清一下。我不希望代码在第二个Art中读取。每个专业只有第一个宣言和学期。
答案 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)