vic57
Сен. 17, 2017 16:53:17
попробуй, только я все 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()
whoami217
Сен. 18, 2017 12:09:18
vic57
Traceback (most recent call last):
File “C:\Users\Гранит-Электрон\Desktop\step_2.py”, line 72, in <module>
Bm = int(d1)
KeyError: ‘Bm’
vic57
Сен. 18, 2017 12:13:04
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())
whoami217
Сен. 18, 2017 14:49:48
vic57
прошу прощения. не допечаталось:
Traceback (most recent call last):
File “C:\Users\Гранит-Электрон\Desktop\step_2.py”, line 72, in <module>
Bm = int(d1)
KeyError: ‘Bm’
ошибку устранила. так как в файле не оказалось этого поля.
whoami217
Сен. 19, 2017 12:21:05
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
vic57
Сен. 19, 2017 12:38:54
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:
в
какой новый файл? все в один файл что-ли?
формулируйте точнее
whoami217
Сен. 19, 2017 12:59:51
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.
vic57
Сен. 19, 2017 13:14:59
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?