Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 24, 2013 10:39:33

mememe
Зарегистрирован: 2013-01-24
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Подкинули задачу

Добрый день.
Нужен совет, есть файл с данными измерений, данные разделяются пробелами.
Первым столбцом является высота над уровнем моря.
Нужно определить прочитав файл минимальную и максимальную высоту, после чего переименовать файл в соответствии с этими значениями.
Пожалуйста, любые советы!

Офлайн

#2 Янв. 24, 2013 11:41:58

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Подкинули задачу

Какого рода советы?.. Читаем построчно файл, бьем строку на слова используя пробел в качестве разделителя. Приводим первое слово к числу. Сравниваем число с некой максимальной и минимальной высотой. Если оно больше или меньше, то меняем максимальную/минимальную. В конце переименовываем файл.



Офлайн

#3 Янв. 24, 2013 12:12:37

mememe
Зарегистрирован: 2013-01-24
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Подкинули задачу

Нашел вот такое решение для поиска максимального значения, должно выдавать индекс строки с максимальным значением, но оно мне постоянно выдает 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 не выводит вообще никакого значения

Отредактировано mememe (Янв. 24, 2013 12:25:55)

Офлайн

#4 Янв. 24, 2013 13:24:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Подкинули задачу

# -*- 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)



Офлайн

#5 Янв. 24, 2013 15:31:36

mememe
Зарегистрирован: 2013-01-24
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Подкинули задачу

FishHook

И хотел еще узнать, как изменить вариант написанный тобой выше если в файлах будут заголовки.
Например первые 4 строчки всякая внутренняя инфа.

Отредактировано mememe (Янв. 24, 2013 17:29:59)

Офлайн

#6 Янв. 25, 2013 01:26:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Подкинули задачу

#!/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')



Офлайн

#7 Янв. 25, 2013 10:48:22

Mozart
От:
Зарегистрирован: 2011-12-12
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Подкинули задачу

Вот так можно с созданием нового файла к примеру:

http://gyazo.com/e6185ce04b433250fd94c7a87e49f82a - код
http://gyazo.com/936f62dd7d813a1ceba329c5353c7bac - результат



Офлайн

#8 Янв. 25, 2013 19:17:15

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Подкинули задачу

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 переименовывание файла с экспериментальными данными чаще всего плохая практика поэтому в примере создан новый файл.



Офлайн

#9 Янв. 26, 2013 09:26:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Подкинули задачу

mememe
И хотел еще узнать, как изменить вариант написанный тобой выше если в файлах будут заголовки.
их можно просто прочитать перед обработкой



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version