Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 17, 2017 16:53:17

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

попробуй, только я все xls,txt перегнал в csv

 #!/usr/bin/env python3
def left_round(s):
    l = str(s).split('.')
    if len(l) > 1: return float(l[0] + '.' + l[1][:1])
    else: return float(l[0]+'.0')
    
def fileToDict(fname,delim=None,endline='\n'):
    with open(fname,encoding='cp1251') as f:
        lines = f.read().split(endline)
    lst = []
    for line in lines:
        tmp = [i.strip() for i in line.split(delim) if i.strip()]
        lst.append(tmp)
    out = [[] for i in range(len(lst[0]))]
    for i in lst:
           for j in range(len(i)):
               out[j].append(i[j])
    d = {}
    for i in out:
        d[i[0]] = [float(j) for j in i[1:]]
    return d
  
d1 = fileToDict('2.csv',';')
t  = [left_round(i) for i in d1['t']]
files = ['text_%d.csv' % i for i in range(1,3)]#тут сама поставь
for f_in in files:
    f_out = f_in.replace('text','out')
    d = fileToDict(f_in,';')
    Ttt = [left_round(i) for i in d['Ttt']]
    for i in t:
        if i in Ttt:
            N = t.index(i)
            Bm = int(d1['Bm'][N])
            if Bm > 0:
                hdr = ['№','t','Bm']
                for i in range(1,Bm + 1): hdr.append('X_%d' %i)
                for i in range(1,Bm + 1): hdr.append('Z_%d' %i)
                data = []
                data.append(str(int(d1['№'][N])))
                for i in hdr[1:]:
                    data.append(str(d1[i][N]))
                f = open(f_out,'w',encoding='cp1251')
                f.write(';'.join(hdr) + '\n')
                f.write(';'.join(data) + '\n')
                f.close()    

Отредактировано vic57 (Сен. 17, 2017 16:56:55)

Офлайн

#2 Сен. 18, 2017 12:09:18

whoami217
Зарегистрирован: 2017-09-09
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

vic57
Traceback (most recent call last):
File “C:\Users\Гранит-Электрон\Desktop\step_2.py”, line 72, in <module>
Bm = int(d1)
KeyError: ‘Bm’

Офлайн

#3 Сен. 18, 2017 12:13:04

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

whoami217
Bm = int(d1)
KeyError: ‘Bm’
в моем коде нет такой строки
 d1 = fileToDict('2.csv',';')
print(d1.keys())
что выдает?
в разных операционных системах формат файлов может быть разный, я думаю у тебя файл не парсится
вообще можешь с xls работать, только открой 2.txt в екселе и сохрани как 2.xls
 #!/usr/bin/env python3
import xlrd
import glob
xls_files = glob.glob('text_*.xls')
print (xls_files)
    
def xls2dict(fname):
    book=xlrd.open_workbook(fname)
    sheet=book.sheet_by_index(0)
    cols=sheet.ncols
    d  = {}
    for col in range(cols):
        l = [i.value for i in sheet.col_slice(col)]
        if l[0]: d[l[0]] = l[1:]
    return d
  
d = xls2dict('2.xls')
print(d.keys())

Отредактировано vic57 (Сен. 18, 2017 13:11:08)

Офлайн

#4 Сен. 18, 2017 14:49:48

whoami217
Зарегистрирован: 2017-09-09
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

vic57
прошу прощения. не допечаталось:
Traceback (most recent call last):
File “C:\Users\Гранит-Электрон\Desktop\step_2.py”, line 72, in <module>
Bm = int(d1)
KeyError: ‘Bm’
ошибку устранила. так как в файле не оказалось этого поля.

Офлайн

#5 Сен. 19, 2017 12:21:05

whoami217
Зарегистрирован: 2017-09-09
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

vic57
времени раньше у меня не было, чтобы обратиться к Вам. возникла проблема. состоит она в том, что если число Bm отличное от нуля, то записывается в новый файл только последнее число Bm со всей строчкой. при чём новый файл out_%d.csv записывается столько раз, сколько файлов text_%d.csv.

нужно чтобы каждая строчка, где Bm отличное от нуля, записывалось в новый файл.

Как получается, если выполняется Ваш код, если колонка Bm:
Bm
4
0
2
0

То в каждый файл out_1.csv, out_2.csv, out_3.csv…out_N.csv записывается строчка:
№ t Bm Xcs_1 Xcs_2 Zcs_1 Zcs_2
25294 346.3876 2.0 268218.75 264243.75 -2100.0 -19050.0


Отредактировано whoami217 (Сен. 19, 2017 12:22:57)

Офлайн

#6 Сен. 19, 2017 12:38:54

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

whoami217
берём именно 4, так как это число на одной строчке с 310.212500. Видим, что Bm = 4, т.е. отличное от нуля. В этом файле 2.txt есть другие колонки X_1, …, X_N и Z_1, …, Z_N, где N в данном случае равно 4. Эти поля X_1, …, X_N и Z_1, …, Z_N с полями №, t, Bm, С и под этими полями строчку, вставляем в новый файл.
как выглядит результат:
№ t Bm X_1 X_2 X_3 X_4 Z_1 Z_2
1 314.112500 4 2.750000 2.750000 2.500000 2.250000 -2100.000000 -19050.000000
Z_3 Z_4 C
13856.250000 9581.250000 125252
whoami217
0, т.е. Bm = 0, то пропускаем вставку в новый файл. И работаем со строчкой, где Bm = 2. Нужно брать новый файл text_2.xls, которая имеет колонку Ttt:
в какой новый файл? все в один файл что-ли?
формулируйте точнее

Отредактировано vic57 (Сен. 19, 2017 12:39:54)

Офлайн

#7 Сен. 19, 2017 12:59:51

whoami217
Зарегистрирован: 2017-09-09
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

vic57
я прошу прощения за не ясность моих мыслей.
нет, в разные.

ещё раз. допустим колонка Bm:
Bm
4
0
2
0
1
3

Bm=4. отлично. записываем в файл out_1.csv строчку, где Bm=4.
дальше пошли. Bm = 0 - пропускаем.
Bm=2. записываем в файл out_2.csv строчку, где Bm=2.
далее Bm = 0 - пропускаем.
Bm=1. записываем в файл out_3.csv строчку, где Bm=1.
Bm=3. записываем в файл out_4.csv строчку, где Bm=3.

Отредактировано whoami217 (Сен. 19, 2017 13:00:23)

Офлайн

#8 Сен. 19, 2017 13:14:59

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

whoami217
Bm=4. отлично. записываем в файл out_1.csv строчку, где Bm=4.
дальше пошли. Bm = 0 - пропускаем.
Bm=2. записываем в файл out_2.csv строчку, где Bm=2.
далее Bm = 0 - пропускаем.
Bm=1. записываем в файл out_3.csv строчку, где Bm=1.
Bm=3. записываем в файл out_4.csv строчку, где Bm=3.
а где здесь проверка из файла text_N.csv?

Отредактировано vic57 (Сен. 19, 2017 13:15:18)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version