Форум сайта python.su
попробуй, только я все 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)
Офлайн
vic57
Traceback (most recent call last):
File “C:\Users\Гранит-Электрон\Desktop\step_2.py”, line 72, in <module>
Bm = int(d1)
KeyError: ‘Bm’
Офлайн
whoami217в моем коде нет такой строки
Bm = int(d1)
KeyError: ‘Bm’
d1 = fileToDict('2.csv',';') print(d1.keys())
#!/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)
Офлайн
vic57
прошу прощения. не допечаталось:
Traceback (most recent call last):
File “C:\Users\Гранит-Электрон\Desktop\step_2.py”, line 72, in <module>
Bm = int(d1)
KeyError: ‘Bm’
ошибку устранила. так как в файле не оказалось этого поля.
Офлайн
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)
Офлайн
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)
Офлайн
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)
Офлайн
whoami217а где здесь проверка из файла text_N.csv?
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.
Отредактировано vic57 (Сен. 19, 2017 13:15:18)
Офлайн