I는 다음과 같은 두 개의 별도의 파일에서 텍스트를 취하려합니다 :파이썬 텍스트 파일 조작
File 1:
000892834 13.663 0.098 0.871 0.093 0.745 4.611 4795
File 2:
892834 4916 75 37 4857 130 128 4795 4.61 -0.09 0 0
및 출력과 같은 얻을 : 나는 몇 가지 코드가
892834 13.663 0.098 0.871 0.093 0.745 4.611 4795
892834 4916 4795 -0.09
을 그 해결책에 가까운 것 같습니다 :
filter_func_1 = lambda x: x >= 15
filter_func_2 = lambda x: (5777 + 100) > x > (5777 - 100)
mergedData = defaultdict(list)
with open('Table1_Karoff.txt') as file_1, open('Table7_Pinsonneault.txt') as file_2, open('Processed_Data.txt', 'w') as outfile:
for line_1 in file_1:
splt_file_1 = line_1.split()
if filter_func_1(splt_file_1[1]):
mergedData[splt_file_1[0].lstrip('0')].append(line_1)
for line_2 in file_2:
splt_file_2 = line_2.split()
Data = map(itemgetter(0, 1, 8, 9), line_2)
if filter_func_2(splt_file_2[1]):
mergedData[splt_file_2[0]].append([' '.join(map(str, i)) for i in Data])
for k in mergedData:
if len(mergedData[k]) == 2:
outfile.write("\n".join(mergedData[k]) + "\n")
return outfile
이 코드는 '해야 할 일'이 두 종류의 필터를 만듭니다. 각 람다의 특정 인덱스를 람다 함수와 비교하여 그것이 맞는지 확인하고, 일치하는 경우 전체 행을 출력 목록에 추가하십시오. 또한 파일 1의 첫 번째 숫자의 시작 부분에서 '000'을 제거하고 동일한 첫 번째 숫자가 두 파일에 모두 존재하는지 확인합니다.
내 문제는 다음과 같습니다 file_1의 ID 번호 (즉, 첫 번째 숫자는) 제대로 내 지식에 코드가 그 일을해야하더라도, 0의 그것에서 제거 모든이없는
1). 00892834로 출력하므로 첫 번째 0 만 제거합니다.
2) 필터를 추가 한 후에는 새 파일에 전혀 데이터가 기록되지 않고 line.split이 제대로 만들어 졌는지 확인했을 때 새로운 목록인데, splt_file_ # 입력에 데이터가 없으므로 필터링 할 데이터가 없다는 것을 의미합니다. 이것은 나에게 이상하고 나는 그것이 어떻게 일어날 수 있는지 이해하지 못한다. 필자는 목록 작성을 위해 최종적으로 splt_file_1 및 splt_file_2 목록을 작성해야하는 끝에 쓰기 행을 추가하여 테스트했지만 아무 것도 내뱉지 않았습니다.
3) 필자가 필요로하는 값은 파일 2의 목록에서 순서대로 호출 할 수 없으므로 (인덱스 0, 1, 8, 9 만 필요함) 필자는 데이터를 매핑 한 다음 인덱스를 출력하려고했습니다 범위 문제, 위 # 2에서 내 문제로 인해 이해할 수 있습니다.
나는이 오류를 제거하는 데 도움이 필요하며, 내 코드가 잘못되었거나 뭔가 실종 된 경우 어떤 도움을 주셔서 감사합니다.
들여 쓰기를 위 코드에서 수정할 수 있습니까? –
@MichaelPratt 물론! 죄송합니다. 눈치 채지 못했습니다 – ImmortalxR
입력 파일에 두 줄 이상 있습니까? 그렇다면 두 파일을 모두 읽은 후 메모리에서 해당 내용을 읽어 메모리에있는 내용을 읽도록하십시오. 이 입력 줄의 순서에 대한 제약이 있습니까? – Gijs