1

私は、フォルダー (linenumberfiles/) に 15 個のファイルがある統計的機械翻訳のプロジェクトに取り組んでいます。各ファイルには、次の形式で複数の行番号が含まれています (1 行に 1 つの行番号)。

12

15

19

15 個のファイルのそれぞれから 10 個のランダムな行番号を抽出して単一の出力ファイル (OutputLinesFile) にしたいと考えています出力ファイルにできるだけ多くの行番号を追加します。出力ファイルの形式は、入力ファイルと同じにする必要があります (1 行に 1 つの行番号)。これは私がこれまでに持っているコードです:

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 に答える