mememe
Янв. 24, 2013 10:39:33
Добрый день.
Нужен совет, есть файл с данными измерений, данные разделяются пробелами.
Первым столбцом является высота над уровнем моря.
Нужно определить прочитав файл минимальную и максимальную высоту, после чего переименовать файл в соответствии с этими значениями.
Пожалуйста, любые советы!
Soteric
Янв. 24, 2013 11:41:58
Какого рода советы?.. Читаем построчно файл, бьем строку на слова используя пробел в качестве разделителя. Приводим первое слово к числу. Сравниваем число с некой максимальной и минимальной высотой. Если оно больше или меньше, то меняем максимальную/минимальную. В конце переименовываем файл.
mememe
Янв. 24, 2013 12:12:37
Нашел вот такое решение для поиска максимального значения, должно выдавать индекс строки с максимальным значением, но оно мне постоянно выдает 0
import csv
import operator
with open(“test.txt”,'r') as f:
reader = csv.reader(f, delimiter=' ')
reader.next()
for line in reader:
index, value = max(enumerate(line), key=operator.itemgetter(1))
print index
Вот кусок данных из файла
2390.00 -0.1061 -0.1076 -0.0500 -0.2629 -0.2811 21.4674 1.2572 0.361 2402.6376 5.6217
2390.20 0.3938 -0.1076 -0.0500 -0.2700 -0.2911 18.3698 2.6769 0.370 767.1412 10.5410
2390.40 0.9678 -0.1076 -0.0500 -0.2700 -0.3341 16.0903 3.5797 0.373 739.7272 13.7974
2390.60 1.3404 -0.1076 -0.0500 -0.2700 -0.3449 14.4943 4.2324 0.379 1919.2277 15.4347
2390.80 1.5703 1.2832 -0.0500 -0.2700 -0.3870 13.3890 4.6874 0.373 693.9707 17.2663
2391.00 1.7362 3.0073 -0.0500 -0.2700 -0.3870 12.5725 5.0362 0.367 716.1253 19.1899
2391.20 1.8512 4.1641 -0.0500 -0.2700 -0.3870 11.8513 5.2573 0.367 686.9627 20.4551
2391.40 1.9369 4.8760 -0.0500 -0.2700 -0.3905 11.3004 5.3919 0.368 726.0114 22.1677
2391.60 1.9909 5.4263 -0.0500 -0.2700 -0.4195 10.8978 5.5215 0.371 720.6960 23.9231
2391.80 2.0450 5.8580 -0.0500 -0.2700 -0.4354 10.5163 5.5775 0.372 -214.9301 24.3724
2392.00 2.1000 6.1622 1.8630 -0.2700 -0.4090 10.1711 5.6237 0.375 -27.1751 24.7760
Ну и замена max на min не выводит вообще никакого значения
FishHook
Янв. 24, 2013 13:24:34
# -*- coding: utf-8 -*-
import csv
with open('uu.txt','r') as f:
reader = csv.reader(f, delimiter=' ')
heights=[float(line[0]) for line in reader]
print 'Max=', max(heights)
print 'Min=', min(heights)
mememe
Янв. 24, 2013 15:31:36
FishHook
И хотел еще узнать, как изменить вариант написанный тобой выше если в файлах будут заголовки.
Например первые 4 строчки всякая внутренняя инфа.
py.user.next
Янв. 25, 2013 01:26:28
#!/usr/bin/env python3
# задан файл с данными измерений, данные разделяются пробелами,
# первым столбцом является высота над уровнем моря;
# определить минимальную и максимальную высоту, после чего
# переименовать файл в соответствии с этими значениями
import os
ifname = 'file.txt'
with open(ifname, encoding='utf-8') as fin:
hmin = 1000000
hmax = -1000000
for line in fin:
height = float(line.split(None, 1)[0])
if height < hmin:
hmin = height
if height > hmax:
hmax = height
newname = 'file({0}-{1}).txt'.format(hmin, hmax)
os.rename(ifname, newname)
print('ok')
Mozart
Янв. 25, 2013 10:48:22
doza_and
Янв. 25, 2013 19:17:15
import numpy as np
data=np.loadtxt("a.dat")
mi,ma=np.min(data[:,0]),np.max(data[:,0])
np.savetxt("{0}_{1}.dat".format(mi,ma),data)
1 Плохая практика не пользоваться готовыми решениями.
2 В опциях savetxt можно отстричь заголовок
3 переименовывание файла с экспериментальными данными чаще всего плохая практика поэтому в примере создан новый файл.
py.user.next
Янв. 26, 2013 09:26:15
mememe
И хотел еще узнать, как изменить вариант написанный тобой выше если в файлах будут заголовки.
их можно просто прочитать перед обработкой