У меня есть такие данные:
MP|3561042|||WQTI544|BEA148|16077: POWER ID|7817|I|103306|||D|1
MP|3561042|||WQTI544|BEA148|16011: BINGHAM ID|45607|I|103306|||D|1
MP|3561042|||WQTI544|BEA148|16005: BANNOCK ID|82839|I|103306|||D|1
MP|3561250|||WQTI576
|BEA135|48301: LOVING TX|82|I|103308|||D|1
MP|3561250|||WQTI576
|BEA135|48443: TERRELL TX|984|I|103308|||D|1
MP|3561250|||WQTI576
|BEA135|48173: GLASSCOCK TX|1226|I|103308|||D|1
Как мне этого добиться:
MP|3561042|||WQTI544|BEA148|16077: POWER ID|7817|I|103306|||D|1
MP|3561042|||WQTI544|BEA148|16011: BINGHAM ID|45607|I|103306|||D|1
MP|3561042|||WQTI544|BEA148|16005: BANNOCK ID|82839|I|103306|||D|1
MP|3561250|||WQTI575|BEA135|48301: LOVING TX|82|I|103308|||D|1
MP|3561250|||WQTI576|BEA135|48443: TERRELL TX|984|I|103308|||D|1
MP|3561250|||WQTI576|BEA135|48173: GLASSCOCK TX|1226|I|103308|||D|1
Я пробовал это:
f=open('C:/Users/user/Desktop/a.csv','r')
lines=f.readlines()
mystr = '|'.join([line.strip() for line in lines])
print(mystr)
MP|3561042|||WQTI544|BEA148|16077: POWER,
ID|7817|I|103306|||D|1|MP|3561042|||WQTI544|BEA148|16011: BINGHAM,
ID|45607|I|103306|||D|1|MP|3561042|||WQTI544|BEA148|16005: BANNOCK,
ID|82839|I|103306|||D|1|MP|3561250|||WQTI576|||BEA135|48301: LOVING,
TX|82|I|103308|||D|1|MP|3561250|||WQTI576|||BEA135|48443: TERRELL,
TX|984|I|103308|||D|1|MP|3561250|||WQTI576|||BEA135|48173: GLASSCOCK,
TX|1226|I|103308|||D|1|MP|3561250|||WQTI576|
Я не достигаю того, чего хочу, помогите, пожалуйста? В первом столбце всегда были данные MP, а в каждой строке 13 каналов в качестве разделителей.
Отредактировано:
Как сделать то же самое с нахождением «MP» вместо «D | 1», ниже показано, что я пробовал, но не дал правильно, потому что есть некоторые строки, которые не имеют «D | 1» и имеют 'U|1234' что-то вроде этого в конце
content = ([l.strip().decode('utf-8') for l in s1 if l.strip()])
for line in content:
find_START = line.find('MP') # check if line has D|1
if find_START ==0:
tmp += line
res.append(tmp)
tmp = ''
else:
tmp += line
for r in res:
print(r)
Его печать, как показано ниже:
MP|3561042|||WQTI544|BEA148|16011: BINGHAM, ID|45607|I|103306|||D|1
MP|3561042|||WQTI544|BEA148|16005: BANNOCK, ID|82839|I|103306|||D|1
MP|3561250|||WQTI576
|BEA135|48301: LOVING, TX|82|I|103308|||D|1MP|3561250|||WQTI576
|BEA135|48443: TERRELL, TX|984|I|103308|||D|1MP|3561250|||WQTI576
|BEA135|48173: GLASSCOCK, TX|1226|I|103308|||D|1MP|3561250|||WQTI576
журнальный файл:
MP|3561042|||WQTI544|BEA148|16077: POWER ID|7817|I|103306|||D|1
MP|3561042|||WQTI544|BEA148|16011: BINGHAM ID|45607|I|103306|||D|1
MP|3561042|||WQTI544|BEA148|16005: BANNOCK ID|82839|I|103306|||D|1
MP|3561250|||WQTI576
|BEA135|48301: LOVING TX|82|I|103308|||D|1
MP|3561250|||WQTI576
|BEA135|48443: TERRELL TX|984|I|103308|||D|1
MP|3561250|||WQTI576
|BEA135|48173: GLASSCOCK TX|1226|I|103308|||D|1
Следовательно:
res = [] # empty list to store the results
tmp = '' # empty string for unindented lines
with open(logFile) as f:
content = f.readlines()
# you may also want to remove empty lines
content = [l.strip() for l in content if l.strip()]
for line in content:
find_END = line.find('D|1') # check if line has D|1
if find_END > 0:
tmp += line
res.append(tmp)
tmp = ''
else:
tmp += line
for r in res: print(r)
ВЫХОД:
MP|3561042|||WQTI544|BEA148|16077: POWER ID|7817|I|103306|||D|1
MP|3561042|||WQTI544|BEA148|16011: BINGHAM ID|45607|I|103306|||D|1
MP|3561042|||WQTI544|BEA148|16005: BANNOCK ID|82839|I|103306|||D|1
MP|3561250|||WQTI576|BEA135|48301: LOVING TX|82|I|103308|||D|1
MP|3561250|||WQTI576|BEA135|48443: TERRELL TX|984|I|103308|||D|1
MP|3561250|||WQTI576|BEA135|48173: GLASSCOCK TX|1226|I|103308|||D|1
@jezrael: по тому же вопросу, когда я пытаюсь использовать функцию замены, она не работает. Можете ли вы сказать мне, что я здесь делаю неправильно? отредактировал в вопросе
@BharatGuda - лучший ответчик на вопросы, понятия не имею.
@DirtyBit: Не могли бы вы сообщить мне, почему функция замены не работает?
@BharatGuda вы заменяете каждый возврат и новую строку пустой строкой. Это точно не сработает. Поскольку вам нужно соединить строки, как я показал в своем ответе.
@DirtyBit понял!! Тай!
спасибо, что поделились кодом. На Mac мне пришлось удалить новую строку из неполных строк, потому что в противном случае вывод все еще содержал бы их, то есть файл не изменился бы. В предложении else: tmp += line.rstrip()
каждая строка должна заканчиваться на
D|1
, не сложно?