Запись в текстовый файл на Python - Как печатать в верхней части нового 2-го столбца?

Этот код читает ячейку из серии файлов сетки. В конечном итоге я собираюсь прочитать тысячи ячеек, поэтому я бы хотел, чтобы статистика отображалась вверху нового второго столбца, а не внизу длинного списка. Кто-нибудь знает, как я могу это сделать?

import os
from os import listdir
import numpy as np

filePath = r'C:\VMsharedUNLOAD\small_example_NoName_200950mWorkCopy3THIN3-FINAL\test'
files = os.listdir(filePath)
fCellList = [len(files)]

queryCol = 5
queryRow = 15

total = 0
variance = 0

######ValueList######
with open('ofile.txt','a') as ofile:
    for file in files:
        f = open(filePath + '\\' + file)
        fCell = f.readlines()[queryRow].split(" ")[queryCol]
        ofile.write(fCell + '\n')
        fCellList.append(float(fCell))
#######MINIMUM#######     
    minimum = min(fCellList[1:])
    ofile.write('\t' + ' min:' + str(minimum) + '\n')    
#######MAXIMUM#######
    maximum = max(fCellList[1:])
    ofile.write('\t' + ' max:' + str(maximum) + '\n')
#######AVERAGE#######  
    for avgNum in fCellList[1:]:
        total += avgNum
    average = (total) / (len(fCellList) - 1)
    ofile.write('\t' + ' avg:' + str(average) + '\n')
########STDEV########   
    for varNum in fCellList[1:]:
        variance += (average - varNum) ** 2
    stdDev = ((variance) / (len(fCellList) - 2)) ** 0.5
    ofile.write('\t' + ' stdDev:' + str(stdDev))
f.close()
ofile.close()

1 ответ

Возможным решением является использование itertools.zip_longest() (требуется Python 3; для использования Python 2 itertools.izip_longest())

import os
from os import listdir
import numpy as np

filePath = r'test'
files = [filepath]
fCellList = [len(files)]

stats = []
out = []

queryCol = 5
queryRow = 15

total = 0
variance = 0

######ValueList######
for file in files:
    with open(filePath + '\\' + file) as f:
        fCell = f.readlines()[queryRow].split(" ")[queryCol]
    out.append(fCell)
    fCellList.append(float(fCell))
#######MINIMUM#######
minimum = min(fCellList[1:])
stats.append('min:' + str(minimum))
#######MAXIMUM#######
maximum = max(fCellList[1:])
stats.append('max:' + str(maximum))
#######AVERAGE#######
for avgNum in fCellList[1:]:
    total += avgNum
average = (total) / (len(fCellList) - 1)
stats.append('avg:' + str(average))
########STDEV########
for varNum in fCellList[1:]:
    variance += (average - varNum) ** 2
stdDev = ((variance) / (len(fCellList) - 2)) ** 0.5
stats.append('stdDev:' + str(stdDev))

with open('ofile.txt','a') as ofile:
    for line in zip_longest(out, stats):
        if not line[1]: line = line[:1]
        ofile.write('\t'.join(line)+'\n')

Также обратите внимание, что если вы используете with заявление для работы с файлами, вам не нужно .close() файл после with заявление.

Другие вопросы по тегам