我是Pyhton的初学者,目前正在尝试编写一个小的脚本,将该文件的行拆分为训练和测试集。该代码为每个FOLD生成两个文件(此处为5 * 2),一个训练和一个测试文件。生成的第一个训练/测试文件(即循环中的第一个)没有问题,也创建了其他文件,但它们为空。您可以在下面找到我的代码段:

for shuffledFile in os.listdir(INPUT_DIR_S):
with open(INPUT_DIR_S + shuffledFile, 'r') as inputFile:
    fold = 1
    pos = 0
    while fold <= FOLD:
        content = inputFile.readlines()
        step = len(content)/FOLD
        testSet = []
        trainSet = []
        for element in content[pos:step*fold]:
            testSet.append(element)
            content.remove(element)
        with open(create_folders(shuffledFile) + "/" + os.path.splitext(shuffledFile)[0] + "_TEST" + str(fold), 'w') as testFile:
            for result_line in testSet:
                testFile.write(str(result_line))
        for element in content:
            trainSet.append(element)
        with open(create_folders(shuffledFile) + "/" + os.path.splitext(shuffledFile)[0] + "_TRAIN" + str(fold), 'w') as trainFile:
            for result_line in trainSet:
                trainFile.write(str(result_line))
        fold += 1
        pos += step


我还使用了调试器,发现content存在问题,因为它在第一次迭代后就为空。
但是我不知道为什么会发生这种情况,以及我实际上必须做些什么来解决它。对于熟悉Python的人来说,这可能是一个非常基本和简单的问题,如果有人可以向我解释真正的问题,我将不胜感激。谢谢大家的时间和精力。

最佳答案

文件对象的行为就像迭代文件中的行一样。当您在文件对象上调用readlines()时,迭代器中的所有项目都将被消耗。随后在同一文件对象上对readlines()的调用将返回一个空列表。

因此,如果您需要遍历文件的行多次,则需要重置迭代器或将第一次调用readlines()返回的行列表存储在单独的变量中,并对其进行多次遍历。你需要。

关于python - Python在一个文件中创建多个文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34613953/

10-11 20:21
查看更多