任何人都可以指导我如何在Python中执行以下合并...
文本文件#1:
5 apple
1 banana
3 pear
4 kiwi
(加上几千个条目)
我的文本文件#2看起来像
apple
orange
strawberry
banana
我想合并两个文本文件,这样我只添加两者中的文件,但也保留文本文件#1链接中的原始数字到相应的标识符。所以在这个例子中,我的合并将如下所示:
5 apple
1 banana
答案 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函数计算并比较两个列表。