【发布时间】:2016-09-10 05:04:59
【问题描述】:
下午好,
我在下面的加星号 for 循环中遇到了一些奇怪的行为。下面的函数本质上是迭代输入字典patient_features,将几个字符串连接起来生成一个 SVMLight 风格的向量。然后打算将此向量写入可交付成果文件。但是,由于某种原因,函数末尾的写入会在每次迭代的星号 for 循环中被调用,从而导致文件过大(以及其他一些更小的问题)。任何有关可能导致此问题的帮助将不胜感激。
def save_svmlight(patient_features, mortality, op_file, op_deliverable):
deliverable1 = open(op_file, 'wb') # feature without patient id
deliverable2 = open(op_deliverable, 'wb') # features with patient id
d1_line = ''
d2_line = ''
count = 0 # VALUE TO TEST IF INCREMENTING
print count
for patient_id in patient_features: #**********
value_tuple_list = patient_features[patient_id]
value_tuple_list.sort()
d2_line += str(int(patient_id)) + ' '
if patient_id in mortality:
d1_line += str(1) + ' '
d2_line += str(1) + ' '
else:
d1_line += str(0) + ' '
d2_line += str(0) + ' '
for value_tuple in value_tuple_list:
d1_line += str(int(value_tuple[0])) + ":" + str("{:1.6f}".format(value_tuple[1])) + ' '
d2_line += str(int(value_tuple[0])) + ":" + str("{:1.6f}".format(value_tuple[1])) + ' '
count += 1
print count # VALUE INCREMENTS WHEN IT SHOULD NOT
deliverable1.write(d1_line); # <- BEING WRITTEN TO EACH LOOP :(
deliverable2.write(d2_line); # <- BEING WRITTEN TO EACH LOOP :(
【问题讨论】:
-
您正在混合制表符和空格。不要那样做。 Python 认为 tab = 8 个空格
-
逐步完成整个过程,用四个空格替换所有选项卡,问题自行解决。考虑到我已经花了大约 4 个小时来思考其他问题,我非常感谢你。太久没有用 Python 做任何事情了,忘记是怎么回事了。
-
一些文本编辑器有一个设置,您可以关闭标签以避免这种情况。
-
@mongolol 如果你将
-t选项传递给python解释器,它会警告你混合制表符和空格。
标签: python python-2.7 for-loop