Python搜索一个文本文件中的值,将它们与另一个文本文件中的值进行比较,如果存在匹配项,则替换这些值
我有两个文件 第一个文件(约400万个条目)有两列:[标签][能量]Python搜索一个文本文件中的值,将它们与另一个文本文件中的值进行比较,如果存在匹配项,则替换这些值,python,Python,我有两个文件 第一个文件(约400万个条目)有两列:[标签][能量] 第二个文件(~200000个条目)有两列:[上标签][下标签] 例如: 文件1: 375677 4444.5 375678 6890.4 375679 786.0 375677 375679 4444.5 786.0 375678 375679 6890.4 786.0 文件2: 375677 375679 375678 375679 我想用文件1中的“能量”
第二个文件(~200000个条目)有两列:[上标签][下标签] 例如: 文件1:
375677 4444.5
375678 6890.4
375679 786.0
375677 375679 4444.5 786.0
375678 375679 6890.4 786.0
文件2:
375677 375679
375678 375679
我想用文件1中的“能量”值替换文件2中的“标签”值,以便文件2变成:
文件2(新):
4444.5 786.0
6890.4 786.0
或将“能量”值添加到文件2中,使文件2成为:
文件2(可选):
375677 4444.5
375678 6890.4
375679 786.0
375677 375679 4444.5 786.0
375678 375679 6890.4 786.0
在python中一定有办法做到这一点,但我的大脑不工作
到目前为止我已经写过了
from sys import argv
from scanfile import scanner
class UnknownCommand(Exception): pass
def processLine(line):
if line.startswith('23'):
print line[0:-1]
filename = 'test1.txt'
if len(argv) == 2: filename = argv[1]
scanner (filename, processLine)
where scanfile is:
def scanner(name, function):
file = open(name, 'r')
while True:
line = file.readline()
if not line: break
function(line)
file.close()
这允许我通过手动插入文件2中的标签(例如23),搜索并打印文件1中的标签+值。毫无意义且耗时
我需要写一个部分,从文件2中读取标签,并将它们连续放入'line.startswith('lable'),直到文件2的末尾
有什么建议吗
谢谢您的帮助。假设
file1
中的标签是唯一的,我会首先将该文件读入字典:
with open('file1') as fd:
data1 = dict(line.strip().split()
for line in fd if line.strip())
这提供了一个字典data1
,其内容如下:
{
'375677': '4444.5',
'375678': '6890.4',
'375679': '786.0',
}
现在,通读文件2
,根据需要执行适当的修改
您可以遍历该文件:
with open('file2') as fd:
for line in fd:
data = line.strip().split()
print data1[data[0]], data1[data[1]]
或者,您可以选择:
with open('file2') as fd:
for line in fd:
data = line.strip().split()
print ' '.join(data), data1[data[0]], data1[data[1]]
只有当4M条目对您的内存来说太多时,这种方法才值得采用
s = set()
with open('File2') as file2:
for line in file2:
for i in line.split():
s.add(i)
d = {}
with open('File1') as file1:
for line in file1:
k,v = line.split()
if k in s:
d[k] = v
with open('NewFile2', 'w') as out_file:
with open('File2') as file2:
for line in file2:
k1,k2 = line.split()
out_file.write(' '.join([k1,k2,d[k1],d[k2]]))
如果你先自己尝试一些东西,然后告诉我们哪里有问题,你会得到更好的答案。我已经写了几个章节来扫描文件1并打印结果(手动放入标签)。不知道如何从文件2中读取标签,并将它们依次插入到我所写的内容中。这可能是完全错误的方式。