저는 파이썬을 처음 접했습니다. 나는이 같은 (매우 큰)으로 구분 된 텍스트 파일의 데이터를 가지고 말 : 텍스트 파일이 정말 크기 때문에파이썬은 구분 된 텍스트 파일에 대해 NA를 찾아서 바꿉니다.
이a|b|c|d|e
1|.|.|-|.
1.2|2.6|||1.7
, 내가 읽고 라인으로 라인을 작성합니다. .
, -
또는 빈 문자열 NA
인 셀을 대체하고 싶습니다. 다음은 내가 시도한 내용입니다.
import csv
f = open('sample1_fixed.txt','wb')
targets1, new1 = ['|.|','|-|','||','| |'], '|NA|'
for line in open('sample1.txt', 'rb'):
for target in targets1:
if target in line:
line = line.replace(target,new1)
for target in targets1:
if target in line:
line = line.replace(target,new1)
f.write(line + "\n")
f.close()
하지만 더 좋은 방법이 있어야한다고 생각합니다. 단락 기호를 사용하는 방법이 있습니까? 또한이 솔루션은 행의 끝과 시작 부분에서 인스턴스를 선택하지 않습니다. 더 좋은 프로그래머의 아이디어가 있습니까?
예상 출력 :
나는 또한 CSV 모듈과 정규식을 사용하여 시도A | B | C | D | E
1 | NA | NA | NA | NA
1.2 | 2.6 | NA | NA | 1.7
:import csv import re f=open('sample1_fixed.txt','wb') with open('sample1.txt','rb') as inputfile: read=csv.reader(inputfile, delimiter='|') for row in read: text = row[1] text = re.sub(r'^\.$','NA',text) text = re.sub(r'^-$','NA',text) f.write(text + '\n') f.close()
그러나 이것은 한 번에 하나의 열을 쓸 수있게 해주었습니다. 출력에서 이들을 모두 얻는 방법을 모르겠습니다 ...
위의 입력에 대한 예상 출력은 얼마입니까? –
내장 된 csv 모듈을 살펴 보셨습니까? 사용자 정의 구분 기호를 지정할 수 있습니다. – marklap
한 가지 방법은 사용자 지정 구분 기호 = '|'및 replace_NAs()에 대한 도우미 함수를 사용하여 csv.reader를 사용하는 것입니다. NA 교체를 원한다는 것만 알았습니다. – smci