Найти - Пользователи
Полная версия: Подкинули задачу
Начало » Python для новичков » Подкинули задачу
1
mememe
Добрый день.
Нужен совет, есть файл с данными измерений, данные разделяются пробелами.
Первым столбцом является высота над уровнем моря.
Нужно определить прочитав файл минимальную и максимальную высоту, после чего переименовать файл в соответствии с этими значениями.
Пожалуйста, любые советы!
Soteric
Какого рода советы?.. Читаем построчно файл, бьем строку на слова используя пробел в качестве разделителя. Приводим первое слово к числу. Сравниваем число с некой максимальной и минимальной высотой. Если оно больше или меньше, то меняем максимальную/минимальную. В конце переименовываем файл.
mememe
Нашел вот такое решение для поиска максимального значения, должно выдавать индекс строки с максимальным значением, но оно мне постоянно выдает 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
# -*- 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
FishHook

И хотел еще узнать, как изменить вариант написанный тобой выше если в файлах будут заголовки.
Например первые 4 строчки всякая внутренняя инфа.
py.user.next
#!/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
Вот так можно с созданием нового файла к примеру:

http://gyazo.com/e6185ce04b433250fd94c7a87e49f82a - код
http://gyazo.com/936f62dd7d813a1ceba329c5353c7bac - результат
doza_and
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
mememe
И хотел еще узнать, как изменить вариант написанный тобой выше если в файлах будут заголовки.
их можно просто прочитать перед обработкой
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB