【问题标题】:Compare Two Text Files with Split Text 2.7使用拆分文本比较两个文本文件 2.7
【发布时间】:2014-08-26 16:17:13
【问题描述】:

所以我有两个文件。一个包含旧的东西,另一个包含不同的新东西。

每个文本文件都有相同的格式:
Example_Students_Year_School_Date

我希望能够比较文件,并了解是日期还是学生人数增加了。然后我将 Date 写入它自己的文本文件,将 Student 写入它自己的文本文件。

那么让我们说 OldText 有:
Example_54_1994_WoodCreek_201309
Example_56_2009_Marshall_201408 Example_20_2008_DennnMan_201309

NewText 有:
Example_54_1994_WoodCreek_201402
Example_59_2009_Marshall_201408

NewText 中的第一个条目将发送到 DateText,因为 DATE 较新,而 NewText 中的第二个条目将发送到 StudentText,因为 STUDENTS 增加了。 OldText 中的第三个条目将不会做任何事情,因为它不在 NewText 中。

我目前有:

for OldRecord in StripOldList:
    OldSplitRec = OldRecord.split('_')
    value1 = OldSplitRec[1]
    value2 = OldSplitRec[2]
    value3 = OldSplitRec[3]
    value3 = OldSplitRec[4]
    value3 = OldSplitRec[5]

diffdict = {}
for SomeRec in DiffSplitText:
    key1, key2, key3, key4, key5= SomeRec.strip().split('_')
    FinalLabel = key1+"_"+key2+"_"+key3+"_"+key4+"_"key5+"_"+key6
    diffdict[key1,key2,key3,key4,key5.strip()] = FinalLabel

    IsNewEdition = True
    IsNewVersion =  True
    IsNewFileType = True

    if (value1 == key1 and value2 == key2):
       IsNewFileType = False

       if (value3 >= key3):
           IsNewEdition = False

       if (value5 >= key5):
           IsNewVersion = False
    if (IsNewFileType == True):
       print "No Match"
    elif (IsNewEdiion == True):
       print  "Found new edition"
       link1.write(SomeRec)
    elif (IsNewVersion == True):
       print "Found new version"
       link2.write(SomeRec)

.close() #closed all files

它只迭代第一个条目并停止,但不止一个不同的文件。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 一些输入示例会有所帮助
  • 假设 OldText 有:Example_54_1994_WoodCreek_201309 Example_56_2009_Marshall_201408 NewText 有:Example_54_1994_WoodCreek_201402 Example_59_1994_Marshall_201408 自从尺寸增加
  • 最好将其添加到您的问题中。
  • 查看difflib 模块。
  • 如果行不匹配,difflib 模块会工作吗? OldText 文件可能有 1,000 个条目;而 NewText 可能只有 50 个。我只需要它来了解学生或日期是否增加,然后将其发送到相应的文本文件。

标签: python python-2.7 for-loop text strip


【解决方案1】:

这是我想出的代码:

value1 = [];
value2 = [];
value3 = [];
value4 = [];
value5 = [];

for OldRecord in StripOldList:
    OldSplitRec =  OldRecord.split('_')
    value1 += [OldSplitRec[0]]
    value2 += [OldSplitRec[1]]
    value3 += [OldSplitRec[2]]
    value4 += [OldSplitRec[3]]
    value5 += [OldSplitRec[4]]

for SomeRec in DiffSplitText:
    key1, key2, key3, key4, key5= SomeRec.split('_')

    for k in range(0,len(value1) ):
        if (value1[k] != key1 and value2[k] != key2):
            print "No Match"
        if (value3[k] < key3):
            print  "Found new edition"
            link1.write(SomeRec)
        if (value5[k] < key5):
            print "Found new version"
            link2.write(SomeRec)


.close() #close all files

【讨论】:

  • 我不一定希望它只与第一行进行比较。我希望它循环浏览文本文件中的所有文件。所以 LINE1 的解析信息会循环遍历 OldText 的解析信息,然后 LINE2 的解析信息会循环遍历 OldText,然后是 LINE3,等等。不幸的是,我收到了这样的输出:匹配!好的!旧版本:Example_54_1994_WoodCreek_201309
    新版本:Example_54_1994_WoodCreek_201409


    不匹配旧版本:Example_54_1994_WoodCreek_201309
    其他文件比较:Example_20_2008_DennnMan_201309
  • 我之前的情况和你的很相似,但是我现在的结果是一样的,它只输入第一行,匹配或不匹配然后停止。最终我读到我无法遍历 2 个文本文件,这就是为什么我继续将它们创建为 LIST 和 DICTIONARY。
  • 查看我的更新答案。第一个循环从旧文件中读取所有信息并将其存储。第二个 for 循环读取新文件的每一行并将其与旧文件中的所有信息进行比较。这就是第二个 for 循环中嵌套的 for 循环的用途。希望这就是你要找的
  • 谢谢,我会看看 UPDATE 并告诉你!
  • 我可以通过 break 和 .seek(0) 修复它
猜你喜欢
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
相关资源
最近更新 更多