약 50,000 줄까지 실행할 수있는 텍스트 파일이 수정되었습니다.
RECORD TRANSACTN SEQUENCE CR R/T ACCOUNT RSN ITEM ITEM CHN USER REASO
NBR NBR OR PIC NBR DB NBR NBR COD AMOUNT SERIAL IND .......FIELD.. DESCR
5,556 01 7450282689 C 538196640 9835177743 15 $9,064.81 00 CREDIT
5,557 01 7450282690 D 031301422 362313705 38 $592.35 43431 DR CR
5,558 01 7450282691 D 021309379 601298839 38 $1,491.04 44896 DR CR
5,559 01 7450282692 D 071108834 176885 38 $6,688.00 1454 DR CR
5,560 01 7450282693 D 031309123 1390001566241 38 $293.42 6878 DR CR
************************************************************************************************************************************
* *
* PPPPPP DDDDDD CCCCC K K # # *
* P P D D C C K K ####### *
* P P D D C K K # # *
* PPPPPP D D C KK # # *
* P D D C K K # # *
* P D D C C K K ####### *
* P DDDDDD CCCCC K K # # *
* *
* *
* START ******************************************************************************************************************** START *
* START ******************************************************************************************************************** START *
* START ******************************************************************************************************************** START *
파일 전체에서 이러한 행 그룹 사이에 임의의 행 브레이크와 헤더 정보가 있습니다. 나는 문자 "C"를 포함하는 행에만 관심이 있고 세 번째 열의 처음 두 숫자가 74 인 경우에만 관심이 있습니다. 각 값은 자체 셀에 있지만 서로 다른 스 플라이 싱 시도로 인해 최종 제품이 엉망처럼 보입니다. 첫 번째 행의 csv 모듈에 헤더를 작성했지만 그 아래의 실제 데이터는 파이썬이 던진 것처럼 보입니다.
지금까지 csv 모듈 내에서 접합을 시도하고 str.find (str, beg, end)를 사용했습니다. 내가 찾은 해결책이 특정 문제에 대해 효과가 있다고 생각하지만, 그것들을 하나의 실행 가능한 코드로 만들 수는 없습니다.
어떤 도움을 주시면 감사하겠습니다.
편집 : 지금까지 csv / codecs 모듈에 대한 코드는
import codecs
import csv
with codecs.open(r'C:\Users\John\Documents\ATM project\PDCKCR09R009_2017-08-03_1115.txt') as f, open('output.csv', 'w') as fout:
writer = csv.writer(fout)
writer.writerow([ 'TRANSACTN_NBR', 'RECORD_NBR',
'SEQUENCE_OR_PIC_NBR', 'CR_DB', 'RT_NBR', 'ACCOUNT_NBR',
'RSN_COD', 'ITEM_AMOUNT', 'ITEM_SERIAL', 'CHN_IND',
'REASON_DESCR', 'SEQ2', 'ARCHIVE_DATE', 'ARCHIVE_TIME', 'ON_US_IND' ])
for line in f:
#f.extend(line.splitlines())
if 'C' in line:
#temp.append(line)
print(line)
else:
print('WRONG LINE:', (line))
나는 다음 요구 사항으로 넘어 가기 전에 작업 세그먼트를 갖기 위해 하나씩 노력하고 있지만 다른 벽에 부딪힌 것 같습니다. 이 양식의 다른 솔루션이 도움이되었지만 내 코드에 적용하는 데 문제가 있습니다.
나는 이것을 위해 갈 것입니다 csv
:
#!/usr/bin/env python
with open('./data.txt') as f:
for line in f:
values = line.split() # this splits your line using spaces as delimiter, like in your data
if (len(values) >= 4 and values[3] == 'C'
and len(values[2]) >= 2 and values[2][:2] == '74'):
print(line)
else:
print('WRONG LINE: ' + line)
질문의 데이터로 출력 :
5,556 01 7450282689 C 538196640 9835177743 15 $9,064.81 00 CREDIT
WRONG LINE: 5,557 01 7450282690 D 031301422 362313705 38 $592.35 43431 DR CR
WRONG LINE: 5,558 01 7450282691 D 021309379 601298839 38 $1,491.04 44896 DR CR
WRONG LINE: 5,559 01 7450282692 D 071108834 176885 38 $6,688.00 1454 DR CR
WRONG LINE: 5,560 01 7450282693 D 031309123 1390001566241 38 $293.42 6878 DR CR
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다