在 Python 中创建具有随机文件路径的 CSV 文件

Create CSV file with randomised filepaths in Python

我有很多 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 个(随机),其余的在另一个文件中。有什么办法可以做到吗?

也许你可以尝试制作索引数组并先将它们打乱。然后对第一个 CSV 使用前 80 个索引,对第二个使用其余 (20) 个索引:

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)

这是机器学习中的常见问题。 scikit-learn has several tools for dealing with this, e.g. 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)