我是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/