Skip to main content
 首页 » 编程设计

python 行在写入文件时连接自身

2025年05月04日28freeliver54

我正在使用 Python 为 10 折交叉验证生成训练和测试数据,并将数据集写入 2x10 分隔文件(每折写入一个训练文件和一个测试文件)。而且奇怪的是,向文件写入数据时,总是“少”了一行。实际上,它甚至可能不会“丢失”,因为我后来发现文件中间的某行(只有一行)将自己连接到它的前一行。所以一个输出文件应该像下面这样(总共应该有 39150 行):

44 1 90 0 44 0 45 46 0 1 
55 -3 95 0 44 22 40 51 12 4 
50 -3 81 0 50 0 31 32 0 1 
44 -4 76 0 42 -30 32 34 2 1 

但是,我不断收到 39149 行,文件中间的某处似乎像这样乱七八糟:

44 1 90 0 44 0 45 46 0 1 
55 -3 95 0 44 22 40 51 12 450 -3 81 0 50 0 31 32 0 1 
44 -4 76 0 42 -30 32 34 2 1 

我的代码:

def k_fold(myfile, myseed=1, k=10): 
    # Load data 
    data = open(myfile).readlines() 
 
    # Shuffle input 
    random.seed = myseed 
    random.shuffle(data) 
 
    # Compute partition size given input k 
    len_total = len(data) 
    len_part = int(math.floor(len_total / float(k))) 
 
    # Create one partition per fold 
    train = {} 
    test = {} 
    for i in range(k): 
        test[i] = data[i * len_part:(i + 1) * len_part] 
        train[i] = data[0:i * len_part] + data[(i + 1) * len_part:len_total] 
 
    return train, test 
 
if __name__ == "__main__": 
    path = '....'  #some path and input 
    input = '...' 
 
    # Generate data 
    [train, test] = k_fold(input) 
 
    # Write data to files 
    for i in range(10): 
        train_old = path + 'tmp_train_' + str(i) 
        test_old = path + 'tmp_test_' + str(i) 
 
        trainF = open(train_old, 'a') 
        testF = open(test_old, 'a') 
 
        print(len(train[i])) 

奇怪的是我对训练和测试数据集做同样的事情。测试数据集输出正确的文件(4350行),但训练数据集有上述问题。我确定该函数返回了 39150 行训练数据,所以我认为问题应该出在文件写入部分。任何人都知道我怎么可能做错了?提前致谢!

请您参考如下方法:

我假设双倍长度行的前半部分是原始文件的最后一行。

readlines(或遍历文件)返回的行仍将以 LF 字符 '\n' 结尾 < strong>except 最后一行,如果文件不以空行结尾。在这种情况下,您所做的改组会将 '\n' 较少的行放在 'data' 中间的某处。

要么在原始文件中附加一个空行,要么在处理之前去除所有行,并在写回文件时将换行符添加到每一行。