操纵txt文件中的一些行

时间:2013-06-28 18:43:08

标签: python file match

我有一个包含单词和数字的文件以及一些只有单词的文件。第一个文件如下所示:

Cow; 39402
Horse; 2039
Pig; 2494
Snake; 39485
Monkey; 9309348

第二个文件如下:

Monkey
Horse
Bird
Pig
Donkey
Monkey

我想将第一个文件的编号添加到第二个文件的文字中。如您所见,并非第二个文件中的所有项都是第一个文件的一部分。在这种情况下,我想打印没有数字的单词。所以我的最终txt文件将如下所示:

Monkey; 9309348 
Horse; 2039
Bird
Pig; 2494
Donkey
Monkey; 9309348
Cow; 39402

这是我试过的:

f = open("wordsonly.txt", "r")
flist = f.readlines()
d = open("wordsandnumbers.txt", "r")
dlist = d.readlines()

nf = open("finalfile.txt", "w")
for line in f:
    for item in dlist:
        newitem = item.rstrip('\n')
        if newitem in line:
            splitline = newitem.split(';')
            newline = line.rstrip('\n')+';'+splitline[1]+'\n'
            nf.write(newline)
            break
        a += 1
        lengthlist = len(dlist)
        if line.rstrip('\n') not in newline:
           if a == lengthlist:
              nf.write(line)

但是,这段代码在某些情况下会给出太多结果(每行超过一个),我不明白为什么......

(我简化了我的代码,所以可能会有一些小错误。我很抱歉)

1 个答案:

答案 0 :(得分:1)

首先您应该为所有单词创建dict,其中数字为值,单词为键

with open("wordsandnumbers.txt", "r") as file1:
    numbers = {k:v.strip() for k,v in (line.split(';') for line in file1)}

然后您可以创建新文件,写入任何单词(如果没有数字)或带有数字的单词

with open("wordsonly.txt", "r") as f:
    with open("finalfile.txt", "w") as nf:
        for line in f:
            line = line.strip():
            if line in numbers:
                nf.write('{}; {}\n'.format(line, numbers[line])
            else:
                nf.write('{}\n'.format(line))