如何从多个文件中提取行号到单个文件

时间:2013-06-18 10:13:54

标签: python

我正在开发一个统计机器翻译项目,我在文件夹中有15个文件(linenumberfiles /)。每个文件包含以下格式的多个行号(每行一行号):

12

15

19

我想从15个文件中的每个文件中提取10个随机行号到单个输出文件(OutputLinesFile)。棘手的部分是一些文件可能包含少于10个行号,在这种情况下我会喜欢从输出文件中提取尽可能多的行号。输出文件的格式应与输入文件的格式相同(每行一个行号)。这是我到目前为止的代码:

import glob
OutputLinesFile = open('OutputLineNumbers', 'w')
inputfiles=glob.glob('linenumberfiles/*')

for file in inputfiles:
    readfile=open(file).readlines()
    OutputLinesFile.write( str(readfile) )
OutputLinesFile.close() 

有没有人有任何想法如何解决这个问题?提前,谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

您可以使用random.shuffle并在此处列出切片:

import glob
import random
count = 10      #fetch at least this number of lines

with open('OutputLineNumbers', 'w') as fout:
   inputfiles=glob.glob('linenumberfiles/*')
   for file in inputfiles:
       with open(file) as f:
           lines = f.readlines()
           random.shuffle(lines)             #shuffle the lines
       fout.writelines(lines[:count]) #pick at most first 10 lines

或使用random.randrange

lines = f.readlines()
lines = [ lines[random.randrange(0, len(lines)] for _ in xrange(count) ]

然后:fout.writelines(lines)

答案 1 :(得分:0)

首先,您应该使用with语句。在这里阅读why。例如:

try:
    with open(file, 'r') as f:
        cont = f.readlines()
except IOError, err:
    print err  

然后你应该看一下random模块。要从f中选择随机项,请使用sample - 方法。要检查输入文件中有多少行,只需使用BIF len()