2013-03-01 2 views
1

텍스트 파일에 값 (예 : 0.2803739 0.280314)이 있습니다. 텍스트 파일의 값을 가장 높은 값이 가장 낮은 값으로 바뀌는 식으로 바꾸고 싶습니다. 예 : 텍스트 파일에 1에서 10까지의 값이 들어 있으면 값 10은 값 1로, 값 9는 2로, 값 8은 3으로 바뀌어야합니다. 다음 스크립트에서 세 번째 "for 루프"는 무시됩니다.텍스트 파일의 값을 찾아서 바꾸려고합니다.

import fileinput 

text_file = r"E:\Jagu\test123.txt" 
f1 = open(text_file, 'r') 

unique_v = set(f1.read().split()) 
a = list(unique_v) 

new_list1= list(a) 
new_list1.sort(reverse = True) 

new_list2 = new_list1 
new_list2.sort(reverse = False) 

l = 0 
m = len (new_list2) 
m = m-1 

f2 = open(text_file + ".tmp", 'w') 

for j in new_list1: 
    c = new_list1 [l] 
    l = l + 1 
    for k in new_list2: 
     d = new_list2[m] 
     m = m - 1 
     for line in f1: 
      f2.write(line.replace(c,d)) 
      print "replaced : " + str(c) + " with : " + str(d) 
f1.close() 
f2.close() 

이 설명이 내 문제를 이해하는 데 도움이되기를 바랍니다. 나는 파이썬 프로그래밍의 초보자이다. 어떤 도움을 주시면 감사하겠습니다.

답변

1

문제 1 : 이것은 동일한 목록에 new_list2new_list1 지점을 만들 것입니다

new_list2 = new_list1 

. 당신이 f1에서 read()이 후

당신은

for line in f1: 

을 수행 할 수 없습니다 당신은

new_list2 = new_list[:] 

문제 2를

new_list2 = list(a) 

또는

이 필요합니다.

당신이 f1.read()는 파일의 끝에있어라고 한 후

f1.seek(0) 
l = f1.readlines() 
for line in f1: 
0

를 수행하므로 f1.seek 전화 (0) 그래서 당신의 마지막에 다시 읽을 수 있습니다 고리.

자세한 내용은 Re-open files in Python?을 참조하십시오.

관련 문제