如何比较和合并具有不同列号的文本文件?

时间:2017-04-26 21:41:18

标签: python merge

任何人都可以指导我如何在Python中执行以下合并...

文本文件#1:

5     apple
1     banana
3     pear
4     kiwi

(加上几千个条目)

我的文本文件#2看起来像

apple
orange    
strawberry
banana

我想合并两个文本文件,这样我只添加两者中的文件,但也保留文本文件#1链接中的原始数字到相应的标识符。所以在这个例子中,我的合并将如下所示:

5     apple
1     banana

2 个答案:

答案 0 :(得分:1)

这是一种可能的方法:

编辑:考虑评论

我首先将你的文本文件#1读入Python字典

d = dict()
with open("file1.txt") as f:
    for line in f:
       (val, key) = line.split()
       d[key] = int(val)

print d

Out: {'kiwi': 4, 1: 'banana', 3: 'pear', 4: 'kiwi', 5: 'apple', 'pear': 3, 'banana': 1, 'apple': 5}

现在,我们将文件2读作Python列表

with open("file2.txt") as f:
    l = f.read().splitlines()

print l
Out: ['apple', 'orange', 'strawberry', 'banana']

现在,创建另一个具有所需输出的字典:

d2 = {key:val for key,val in d.iteritems() if key in l}
print d2
Out: {'apple': 5, 'banana': 1}

我将由您决定如何将字典写入文本文件。我会使用pandas将其转换为dataFrame并将dataFrame写为csv或tsv。这是一种解决方法,必须有更直接的方法来实现它。

答案 1 :(得分:0)

我很抱歉没有提供有关我之前尝试的信息(我没有尝试免费提供代码,只是卡住了,需要一些指导)。

基本上我有一个段落形式有700,000个单词的txt文档,我想计算单词并将其交叉引用到另一个列表形式的文档中。我到目前为止

Sub Header()
    Application.ScreenUpdating = False

    Dim sht2 As Worksheet
    Set sht2 = ThisWorkbook.Worksheets("Email Form")

    sht2.Activate
    sht2.Unprotect

    Dim LastRow As Long, LastCol As Long
    Dim rng As Range, c As Range
    Dim WholeRng As Range
    Dim i As Integer

    On Error GoTo 0

    With sht2
        Set rng = .Cells

        LastRow = rng.Find(What:="*", After:=rng.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row

        LastCol = rng.Find(What:="*", After:=rng.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column

        'MsgBox wholerng.Address
        Set WholeRng = Range(Cells(i, "B"), Cells(LastRow, LastCol)).Rows

        For i = 4 To LastRow
            If sht2.Cells(i, 1).Value = "X" Then
            With WholeRng
                With .Interior
                .PatternColorIndex = xlAutomatic
                .Color = 1
                .TintAndShade = 0
                .Font.Color = 0
                End With
            End With
            End If
        Next i

        Dim b As Boolean
        For Each rng In WholeRng.Rows
            If Not rng.Hidden Then
                If b Then rng.Interior.Color = 1
                b = Not b
            End If
        Next
    End With

    Set sht2 = Nothing
    Set rng = Nothing
    Set WholeRng = Nothing
    Application.ScreenUpdating = False
End Sub

此时我准备使用LibreOffice Base使用2个表进行比较,但即使使用数字计数从700k减少到34k的count函数,每当我尝试上传时输入数据都会导致程序崩溃。所以我不得不试着想出一个代码,它可以让我比较python中的两个txt文件,它可以很好地处理这个数据量。我真的不知道从哪里开始,虽然我知道一些合并函数,我只是不知道如何定义合并。我最后这样做了

fname = raw_input("Enter file name: ")
fh = open(fname)
inp = fh.read().upper()
new_fh2 = inp.replace('.','').replace(',','').replace('?','')
new_fh3 = new_fh2.replace('-','').replace('_','').replace(';','')
new_fh4 = new_fh3.replace(':','').replace('!','').replace('(','')
new_fh5 = new_fh4.replace(')','').replace('/','')
new_fh6 = new_fh5.replace('|','').replace('&','').replace('[','')
new_fh7 = new_fh6.replace(']','').replace('%','').replace('+','')
new_fh8 = new_fh7.replace('*','').replace('@','').replace('=','')
new_fh9 = new_fh8.replace('>','').replace('<','')
new_fh10 = new_fh9.replace('{','').replace('}','').replace('~','')
new_fh11 = new_fh10.replace('"','').split()
new_fh12 = sorted(set(new_fh11)) 
for word in new_fh12:
    print new_fh11.count(word), word`

然后我拿了这个列表并将其放入excel的一列中,将我的第二个列表添加到另一列,然后使用countif函数计算并比较两个列表。