Прежде всего, вам не нужен отдельный цикл, который записывает файлы в files.txt . Вы можете выполнить всю операцию как часть цикла os.listdir
. Вам просто нужно сформировать полный путь к каждому файлу (путь, который вы должны передать np.loadtxt
позже). Например:
import os
data_path = os.path.abspath("/media/linux/DATADISK")
for f in os.listdir(data_path):
f_path = os.path.join(data_path, f)
print(f_path)
# Output:
# /media/linux/DATADISK/gdf.dat
# /media/linux/DATADISK/klj.txt
Затем вы можете использовать параметр delimiter
np.loadtxt
, чтобы указать, что каждая строка каждого файла отделяется пробелом. Параметр usecols
, который вы вводите, уже верен, если вас интересует только 1-й столбец.
data = np.loadtxt(f_path, delimiter=' ', usecols=0)
print(data)
# Output:
# /media/linux/DATADISK/gdf.dat
# [4. 2. 8.]
# /media/linux/DATADISK/klj.txt
# [4. 6. 6.]
Тогда у вас уже была правильная средняя часть кода. Но я бы порекомендовал сначала открыть файл average.txt , чтобы вам не нужно было open
его в каждом цикле.
with open("average.txt", "a") as output:
for f in os.listdir(data_path):
...
average = (data[0] + data[-1]) / 2
output.write(str(average) + "\n")
Соберите все вместе:
import numpy as np
import os
data_path = os.path.abspath("/media/linux/DATADISK")
with open("average.txt", "a") as output:
for f in os.listdir(data_path):
f_path = os.path.join(data_path, f)
data = np.loadtxt(f_path, delimiter=' ', usecols=0)
average = (data[0] + data[-1]) / 2
output.write(str(average) + "\n")
Образец average.txt :
6.0
5.0
Порядок будет зависеть от возврата os.listdir
, поэтому gdf.bat будет обработано до klj.txt .