在Python中使用随机文件路径创建CSV文件

时间:2019-01-16 11:08:23

标签: python python-3.x csv filepath

我有很多csv文件,包括我进行的模拟中的数据。我通过将所有模拟输出的csv文件作为文件路径放在另一个csv文件中,将它们提供给深度学习算法。但是,我需要两个csv文件,其中一个包含20%的输出csv文件路径,另一个包含其余的80%。我有一个算法可以做到,但是它不是随机的;

with open('C:\\train.csv', 'w') as outf:

  print('x:data,y:label', file=outf)

  for i in range(80):
      print('./1/a_%s.csv, 1' % (i + 21), file=outf)

with open('C:\\test.csv', 'w') as outf:

  print('x:data,y:label', file=outf)

  for i in range(20):
      print('./1/a_%s.csv, 1' % (i + 1), file=outf)

当我这样做时,我在一个csv文件中得到了1-20的文件,而在另一个csv文件中得到了21到100的文件。但是,我希望将它们随机化。因此,如果我总共有10个样本,则在一个文件中有3个和7个(随机),而在另一个文件中有其余的。有办法吗?

2 个答案:

答案 0 :(得分:3)

也许您可以尝试制作索引数组并先对其进行随机排序。然后将前80个索引用于第一个CSV,将其余80个用于第二个CSV:

from random import shuffle    

indices = list(range(1,101))
shuffle(indices)

with open('C:\\train.csv', 'w') as outf:
    print('x:data,y:label', file=outf)

    for i in indices[:80]:
        print('./1/a_%s.csv, 1' % i, file=outf)

with open('C:\\test.csv', 'w') as outf:
    print('x:data,y:label', file=outf)

    for i in indices[80:]:
        print('./1/a_%s.csv, 1' % i, file=outf)

答案 1 :(得分:0)

这是机器学习中的常见问题。 scikit-learnseveral tools用于处理此问题,例如train_test_split

from sklearn.model_selection import train_test_split

indices = list(range(1, 101))
i_a, i_b = train_test_split(indices, train_size=0.8, test_size=0.2)

现在,您可以像原始代码一样遍历i_a(80个随机索引)和i_b(20个随机索引):

with open('C:\\train.csv', 'w') as outf:
    print('x:data,y:label', file=outf)

    for i in i_a:
        print('./1/a_%s.csv, 1' % i, file=outf)

with open('C:\\test.csv', 'w') as outf:
    print('x:data,y:label', file=outf)

    for i in i_b:
        print('./1/a_%s.csv, 1' % i, file=outf)