【发布时间】:2014-10-04 08:50:38
【问题描述】:
我有一个如下的文本文件
First col, Second col, Third col, Fourth col,...
与此类似:
Johnny, Rodgers, ID1, 18th July,...
Johnny, Rodgers, ID1, 18th July,...
Pat, Bryant, ID2, 29th April,...
Pat, Bryant, ID2, 9th May,...
Jim, Williams, ID3, 10th March,...
Jim, Williams, ID3, 17th March,...
Jim, Williams, ID3, 21st March,...
etc
我想检查第 3 列是否有重复,在这种情况下,请检查第 4 列是否与第 3 列中的重复行相同。如果第 3 列和第 4 列也相同,则删除两行(整行),如果第 4 列不同,则存储结果。之后打印/存储结果。
这是,
* 如果第 1、2 行在第 3 列具有相同的值,在第 4 列也具有相同的值,则删除这两行
* 如果第 3 行和第 4 行在第 3 列具有相同的值而在第 4 列具有不同的值,则打印行并计数 +1
* 如果第 5、6 和 7 行在第 3 列具有相同的值而在第 4 列具有不同的值,则打印行并计数 +1
这样执行后的结果会是这样的
Pat, Bryant, ID2, 29th April,...
Pat, Bryant, ID2, 9th May,...
Jim, Williams, ID3, 10th March,...
Jim, Williams, ID3, 17th March,...
Jim, Williams, ID3, 21st March,...
counter = 2 #Number of different ID present
我的想法是制作两个列表并在那里存储行,但我没有成功设置目标并同时比较其他列。我还需要循环和弹出我当前的逻辑,但我做得不好。
val = []
duplicated = []
with open('file.txt', 'rt') as myf.
for line in myf:
col = line.stip():split(',')
if col[2] not in val:
val.append( THE ROW HERE ) #How to copy and parse the row?
else:
duplicated.append( THE ROW HERE ) #Same question
#Comparisons
for x in value:
if x in dupl:
value.pop(x)
dupl.pop(x)
counter = len(val) #Counter of total cases not erased
val.extend(duplicated)
### I would like to print the whole set of rows ordered by the 3rd col
for element in val:
print element
print "counter of cases: " , counter
非常欢迎帮助和建议改进我的编码。
【问题讨论】:
-
公共行(要删除的行)是否总是相邻,或者是否有必要将所有内容都保留在内存中直到文件结束?
-
@SergeBallesta 嗨!它们总是相邻的。我不知道会有多少重复的情况。通常会有 2 个连续的行进行比较,但它们可能更多的是一个未确定的值(超过 4 行真的很奇怪,但有可能)。
标签: python list python-2.7 text ordereddictionary