1

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

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() 

有没有人知道如何解决这个问题?在此先感谢您的帮助!

4

2 回答 2

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)

于 2013-06-18T10:26:12.630 回答
0

首先,你应该使用with语句。在这里阅读为什么。例子:

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

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

于 2013-06-18T10:28:34.393 回答