我正在开发一个统计机器翻译项目,我在文件夹中有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()
有没有人有任何想法如何解决这个问题?提前,谢谢你的帮助!
答案 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()
。