比较包含一行单词的2个文件

时间:2012-10-21 03:10:18

标签: python file-io set

one = open('one.txt') 
two=open('two.txt')

def bres(obj1,obj2):
 x=obj1.readline().split()
 cc=obj2.readline().split()
 ela=set(x)
 elamou=set(cc)
 print elamou|ela
bres(one,two)

文件one.txt是这样的:one two tree 文件two.txt是这样的:one four

我想找到两个文件的联合。这段代码的结果是一组空白。正确答案是one。错误在哪里?

3 个答案:

答案 0 :(得分:2)

我找到了它!

def bres():
     with open('one.txt') as f:
      x=f.readline().split()
     with open('two.txt') as f:
      cc=f.readline().split()
      ela=set(x)
      elamou=set(cc)
      print elamou&ela
bres()

答案 1 :(得分:1)

作为一种风格问题,我会将文件名传递给bres,然后让它返回一个列表,然后从调用者处打印出来。

def bres(file1, file2):
  sets = []
  for n in (file1, file2):
    with open(n) as f:
      sets.append( set( f.readline().split() ) )
  return list(sets[0] & sets[1])

print ' '.join(bres('one.txt', 'two.txt'))

如上所述(和你一样)使用with是处理打开和读取文件的最干净,最明确的方法。但是,如果由于某种原因您对较短的代码感兴趣,并且您不介意依赖垃圾收集来为您关闭文件句柄,则可以使用列表解析将设置列表的创建缩短为一行: / p>

def bres(file1, file2):
  sets = [ set( file(f).readline().split() ) for f in (file1, file2) ]
  return list(sets[0] & sets[1])

print ' '.join(bres('one.txt', 'two.txt'))

我很想导入operator并使用reduce(operator.and_, sets)来概括事物 - 那些明确的索引只会让我感到烦恼。但这可能是在“Guido不喜欢功能性编程”的原因下提出的......

答案 2 :(得分:0)

def bres(obj1,obj2):
    x=obj1.readline().split()
    cc=obj2.readline().split()
    results=[]
    for a in x:
        if a in cc:
            results.append(a)
    return results

以上内容应该有效,并且基于您提供的代码。

要获得结果,您只需使用print bres(file_object_1,file_object_2)