我有一个包含值的文本文件(例如,0.2803739 0.280314)。我想以这样的方式替换文本文件中的值,即最高值将被最低值替换,依此类推。例如如果文本文件包含从1到10的值,则值10应替换为值1,值9应替换为2,值8应替换为3,依此类推。在下面的脚本中,第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()
希望这些解释有助于理解我的问题。我是Python编程的初学者。任何帮助将不胜感激。
答案 0 :(得分:1)
问题1:
new_list2 = new_list1
这会使new_list2
和new_list1
指向同一个列表。你需要
new_list2 = list(a)
或
new_list2 = new_list[:]
问题2:
你做不到
for line in f1:
来自read()
后的f1
。
待办事项
f1.seek(0)
l = f1.readlines()
for line in f1:
答案 1 :(得分:0)
在你调用f1.read()后,你就在文件的末尾,所以调用f1.seek(0),这样你就可以在最后一个for循环中再次读取它。
有关详细信息,请参阅Re-open files in Python?。