Форум сайта python.su
1
Собственно есть задача, на основе данных из одного файла, создать другой файл.
Содержание исходного файла:
5125002 | + | | | + | | | + | | | + | | | | | | | | | | | | | | | АК | Ктг. 5На выходе нужно получить, такое:
5125003 | + | | + | + | | | + | | | + | | | | | | | | | | | | | | | АК | Ктг. 2
5125002 VK=1 PI=0 IM=0 IG=1 45=0 43=0 17=1 18=0 19=0 21=1 22=0 23=0 24=0 25=0 26=0 27=0 31=0 29=0 32=0 34=0 36=0 55=0 56=0 KS=0 AK KT=5;Т.е. разделители ‘|’, между ними, в исходном файле, ‘+’ или пусто, так же есть несколько тестовых значений.
5125003 VK=1 PI=0 IM=1 IG=1 45=0 43=0 17=1 18=0 19=0 21=1 22=0 23=0 24=0 25=0 26=0 27=0 31=0 29=0 32=0 34=0 36=0 55=0 56=0 KS=0 AK KT=2;
import csv import os if os.path.exists('status.abn'): os.remove('status.abn') with open('status.txt') as f: reader = csv.reader(f, delimiter='|') for line in reader: data = [line[0][:-1]] if line[1] == ' + ': data.append('VK=1') else: data.append('VK=0') if line[2] == ' + ': data.append('PI=1') else: data.append('PI=0') if line[3] == ' + ': data.append('IM=1') else: data.append('IM=0') if line[4] == ' + ': data.append('IG=1') else: data.append('IG=0') if line[5] == ' + ': data.append('45=1') else: data.append('45=0') if line[6] == ' + ': data.append('43=1') else: data.append('43=0') if line[7] == ' + ': data.append('17=1') else: data.append('17=0') if line[8] == ' + ': data.append('18=1') else: data.append('18=0') if line[9] == ' + ': data.append('19=1') else: data.append('19=0') if line[10] == ' + ': data.append('21=1') else: data.append('21=0') if line[11] == ' + ': data.append('22=1') else: data.append('22=0') if line[12] == ' + ': data.append('23=1') else: data.append('23=0') if line[13] == ' + ': data.append('24=1') else: data.append('24=0') if line[14] == ' + ': data.append('25=1') else: data.append('25=0') if line[15] == ' + ': data.append('26=1') else: data.append('26=0') if line[15] == ' + ': data.append('27=1') else: data.append('27=0') if line[16] == ' + ': data.append('31=1') else: data.append('31=0') if line[17] == ' + ': data.append('29=1') else: data.append('29=0') if line[18] == ' + ': data.append('32=1') else: data.append('32=0') if line[19] == ' + ': data.append('34=1') else: data.append('34=0') if line[20] == ' + ': data.append('36=1') else: data.append('36=0') if line[21] == ' + ': data.append('55=1') else: data.append('55=0') if line[22] == ' + ': data.append('56=1') else: data.append('56=0') if line[23] == ' + ': data.append('KS=1') else: data.append('KS=0') if line[24] == ' АК ': data.append('AK') else: data.append('AK') if line[26] == ' Ктг. 1': data.append('KT=1') elif line[26] == ' Ктг. 2': data.append('KT=2') elif line[26] == ' Ктг. 3': data.append('KT=3') elif line[26] == ' Ктг. 4': data.append('KT=4') elif line[26] == ' Ктг. 5': data.append('KT=5') f2 = open('status.abn', 'a') f2.write(' '.join(map(str, data))+';\n') f2.close()
Офлайн
857
>>> lst = [(' + ', 'VK=1', 'VK=0'), ... (' + ', 'PI=1', 'PI=0'), ... (' + ', 'IM=1', 'IM=0'), ... (' + ', 'IG=1', 'IG=0')] >>> >>> parts = [' + ', ' x ', ' + ', ' y '] >>> >>> out = [] >>> for i in range(len(parts)): ... if parts[i] == lst[i][0]: ... out.append(lst[i][1]) ... else: ... out.append(lst[i][2]) ... >>> out ['VK=1', 'PI=0', 'IM=1', 'IG=0'] >>>
>>> lst = [(' + ', 'VK=1', 'VK=0'), ... (' + ', 'PI=1', 'PI=0'), ... (' + ', 'IM=1', 'IM=0'), ... (' + ', 'IG=1', 'IG=0')] >>> >>> parts = [' + ', ' x ', ' + ', ' y '] >>> >>> out = [] >>> for i, j in zip(parts, lst): ... if i == j[0]: ... out.append(j[1]) ... else: ... out.append(j[2]) ... >>> out ['VK=1', 'PI=0', 'IM=1', 'IG=0'] >>>
>>> lst = [(' + ', 'VK=1', 'VK=0'), ... (' + ', 'PI=1', 'PI=0'), ... (' + ', 'IM=1', 'IM=0'), ... (' + ', 'IG=1', 'IG=0')] >>> >>> parts = [' + ', ' x ', ' + ', ' y '] >>> >>> out = [] >>> for i, j in zip(parts, lst): ... out.append(j[1] if i == j[0] else j[2]) ... >>> out ['VK=1', 'PI=0', 'IM=1', 'IG=0'] >>>
Отредактировано py.user.next (Июнь 7, 2019 08:17:48)
Офлайн
186
>>> s1 = "5125002 | + | | | + | | | + | | | + | | | | | | | | | | | | | | | АК | Ктг. 5" >>> s2 = ("VK", "PI", "IM", "IG", "45", "43", "17", "18", "19", "21", "22", "23", "24", "25", "26", "27", "31", "29", "32", "34", "36", "55", "56", "KS") >>> " ".join(map(lambda x1, x2: x1+'='+x2, s2, [ '1' if x.strip() else '0' for x in s1.split('|')[1:-2]])) 'VK=1 PI=0 IM=0 IG=1 45=0 43=0 17=1 18=0 19=0 21=1 22=0 23=0 24=0 25=0 26=0 27=0 31=0 29=0 32=0 34=0 36=0 55=0 56=0 KS=0'
Отредактировано Rodegast (Июнь 7, 2019 11:07:55)
Офлайн