Python 如何将一个文本文件中的行随机分割为两个不同的文本文件?

Python 如何将一个文本文件中的行随机分割为两个不同的文本文件?,python,random,Python,Random,我有一个文本文件,比如说,100行,我想用下面的代码将这些行随机分成80-20行,分成两个单独的文本文件,但它没有进行适当的分区。我得到了不同数量的文件。我应该在文件2中得到80行,在文件1中得到20行 有人能指出错误并建议是否有更好的方法吗。请注意,total.txt是原始文件,需要分为文件1和文件2 def partition(l, pred): fid_train=open('meta/file1.txt','w') fid_test = open('meta/file2.

我有一个文本文件,比如说,100行,我想用下面的代码将这些行随机分成80-20行,分成两个单独的文本文件,但它没有进行适当的分区。我得到了不同数量的文件。我应该在文件2中得到80行,在文件1中得到20行

有人能指出错误并建议是否有更好的方法吗。请注意,total.txt是原始文件,需要分为文件1和文件2

def partition(l, pred):
    fid_train=open('meta/file1.txt','w')
    fid_test = open('meta/file2.txt','w')
    for e in l:
        if pred(e):
            fid_test.write(e)
        else:
            #fid_train.write(e+'\n')
            fid_train.write(e)
    return fid_train,fid_test

lines = open("meta/total_list.txt").readlines()
lines1, lines2 = partition(lines, lambda x: random.random() < 0.2)        
def分区(l,pred):
fid_train=open('meta/file1.txt','w')
fid_test=open('meta/file2.txt','w')
对于l中的e:
如果是pred(e):
fid_测试写入(e)
其他:
#fid_列写入(e+'\n')
fid_列车写入(e)
返回fid_列车,fid_测试
lines=open(“meta/total_list.txt”).readlines()
lines1,lines2=分区(线,λx:random.random()<0.2)

考虑到你只有100行,而且你显然想要一个精确的80/20分割,我建议你只需洗牌并写出你想要的行数。比如:

import random

# read everything in
lines = open("meta/total_list.txt").readlines()

# randomise order
random.shuffle(lines)

# split array up and write out according to desired proportions
open('meta/file1.txt', 'w').writelines(lines[:20])
open('meta/file2.txt', 'w').writelines(lines[20:])
请注意,许多库提供类似的功能,例如

您最初的操作方式会导致一个错误,并且可能会在文件1中给出12到28行。您可以通过以下方式进行分析计算:

from scipy.stats import binom

binom.ppf([0.025, 0.975], 100, 0.2)

它对我不起作用,我不知道为什么文本文件会抛出一个错误:“list”对象没有属性“shuffle”total_list是一个文本文件,所以我使用的是“lines=open”(“meta/total_list.txt”).readlines()lines.shuffle()@KRISHNACHAUHAN抱歉,我记错了shuffle方法的位置,我已经用随机模块更新了答案非常感谢您,先生,@Sam Mason,我希望我能学会在这种情况下使用train_test_split来处理文本文件。@KRISHNACHAUHAN在您的案例中,您可以这样做:
file1,file2=train_test_split(行,test_size=0.2)
您将在
文件1
文件2
中获得适当长度的列表,先生,我以前已经这样做过,但我的数据加载器仅从这些列车测试文本文件读取文件位置。在这里我得到了列表,有没有办法用这个函数写入文本文件