Python dict.keys() 有密钥但表现得好像没有密钥
Python dict.keys() has the key but acts as it doesn´t have it
我要替换 Excel 中的很多值,所以我有一个包含数百个键的字典,但是当键有斜杠 ( / ) 时,它不会输入 if。
如您所见,我尝试使用 doble,//,并在之前添加 r 使其成为文字。
当我在 dict.keys() 中执行 ("stringwith /slash") 时,我得到一个 True,但是当我 运行 程序时,它们被跳过,就好像它们没有存在。
import xlwt
import xlrd
dictForReplacement={}
for i in range(0,101):
x = "Estigfend" + str(i) + str(i)+ " puntos de 100"
dictForReplacement[x] = str(i)
x = "Estigfend" + str(i) + str(i)+ " puntos de 100Completada con retraso"
dictForReplacement[x] = str(i)
x = "Estigfend" + str(i) + str(i)+ " puntos de 100Presentada de nuevo"
dictForReplacement[x] = str(i)
x = "Estigfend" + str(i) + str(i)+ " puntos de 100Borrador"
dictForReplacement[x] = str(i)
x = "Estigfend" + str(i) + str(i)+ " puntos de 100Sin entregar"
dictForReplacement[x] = str(i)
x = "Estigfend" + str(i)+"/100" + str(i)+ " puntos de 100Sin entregar"
dictForReplacement[x] = str(i)
x = "Estigfend" + str(i)+"/100" + str(i)+ " puntos de 100"
dictForReplacement[x] = str(i)
dictForReplacement[r"EstigfendSin entregar"] = "NP"
dictForReplacement["EstigfendTarea asignada"] = "TA"
#here is the problem, the number was in case I founded the solution
dictForReplacement[r"Estigfend /100Sin calificación"] = "NP 00"
dictForReplacement[r"Estigfend /100Sin calificación"] = "NC 0"
dictForReplacement["Estigfend //100Sin calificación"] = "NC 1"
dictForReplacement[r'Estigfend //100Sin calificaciónCompletada con retraso'] = "NC 2"
dictForReplacement['Estigfend /100Sin calificaciónCompletada con retraso'] = "NC 3"
dictForReplacement[r"Estigfend /100Sin calificaciónCompletada con retraso"] = "NC 4"
dictForReplacement[r"Estigfend /100Sin calificaciónBorrador"] = "NC 5"
dictForReplacement["Estigfend /100Sin calificación"] = "NP"
###################################################
#heres the if
ExcelNewName = "AAA"
########################################## Name of Excel to be modified
workbook = xlrd.open_workbook('Intento Calificaciones clear.xlsx')
sheet = workbook.sheet_by_name('Hoja1')
#write the data into new Excel file:
new_workbook = xlwt.Workbook()
new_sheet = new_workbook.add_sheet('Hoja1')
for i in range(sheet.nrows):
data = [sheet.cell_value(i, col) for col in range(sheet.ncols)]
for index, value in enumerate(data):
if value in dictForReplacement.keys():
new_sheet.write(i, index, str(dictForReplacement.get(value)))
else:
new_sheet.write(i, index, value)
new_workbook.save(ExcelNewName+'.xls')
这是我没有 Ktinder 的代码,因为它是一个 GUI,我知道这里不需要它
所以现在你也可以运行了。
edit4: 接下来3行错了
我不知道如何在这里添加一个 excel 文件,最大的问题是带有 / 的字符串,所以只需创建一个页面并让一个单元格成为:
Estigfend /100Sin calificación
edit2:有人说 excel 肯定在添加其他内容,我会调查一下
编辑3:
是隐形字符!
我的错误,dict.keys() 显然工作正常,但是当打印没有键的值时(当我知道我有所有可能的选项作为键时),我看到它们看起来就像我的钥匙,但由于不可见字符,它们不一样!!!
我更改了部分代码以获取所有错误值的列表,使用 else,然后在此列表的 for 中应用 print(repr(value)) 以查看不可见字符
看到这个:
所以我的 Excel 很奇怪,正如@CollinHeist 之前在评论中所说的那样,它做到了
dictForReplacement[r"Estigfend\xa0/100Sin calificación"] = "NP"
感谢评论者
我要替换 Excel 中的很多值,所以我有一个包含数百个键的字典,但是当键有斜杠 ( / ) 时,它不会输入 if。
如您所见,我尝试使用 doble,//,并在之前添加 r 使其成为文字。
当我在 dict.keys() 中执行 ("stringwith /slash") 时,我得到一个 True,但是当我 运行 程序时,它们被跳过,就好像它们没有存在。
import xlwt
import xlrd
dictForReplacement={}
for i in range(0,101):
x = "Estigfend" + str(i) + str(i)+ " puntos de 100"
dictForReplacement[x] = str(i)
x = "Estigfend" + str(i) + str(i)+ " puntos de 100Completada con retraso"
dictForReplacement[x] = str(i)
x = "Estigfend" + str(i) + str(i)+ " puntos de 100Presentada de nuevo"
dictForReplacement[x] = str(i)
x = "Estigfend" + str(i) + str(i)+ " puntos de 100Borrador"
dictForReplacement[x] = str(i)
x = "Estigfend" + str(i) + str(i)+ " puntos de 100Sin entregar"
dictForReplacement[x] = str(i)
x = "Estigfend" + str(i)+"/100" + str(i)+ " puntos de 100Sin entregar"
dictForReplacement[x] = str(i)
x = "Estigfend" + str(i)+"/100" + str(i)+ " puntos de 100"
dictForReplacement[x] = str(i)
dictForReplacement[r"EstigfendSin entregar"] = "NP"
dictForReplacement["EstigfendTarea asignada"] = "TA"
#here is the problem, the number was in case I founded the solution
dictForReplacement[r"Estigfend /100Sin calificación"] = "NP 00"
dictForReplacement[r"Estigfend /100Sin calificación"] = "NC 0"
dictForReplacement["Estigfend //100Sin calificación"] = "NC 1"
dictForReplacement[r'Estigfend //100Sin calificaciónCompletada con retraso'] = "NC 2"
dictForReplacement['Estigfend /100Sin calificaciónCompletada con retraso'] = "NC 3"
dictForReplacement[r"Estigfend /100Sin calificaciónCompletada con retraso"] = "NC 4"
dictForReplacement[r"Estigfend /100Sin calificaciónBorrador"] = "NC 5"
dictForReplacement["Estigfend /100Sin calificación"] = "NP"
###################################################
#heres the if
ExcelNewName = "AAA"
########################################## Name of Excel to be modified
workbook = xlrd.open_workbook('Intento Calificaciones clear.xlsx')
sheet = workbook.sheet_by_name('Hoja1')
#write the data into new Excel file:
new_workbook = xlwt.Workbook()
new_sheet = new_workbook.add_sheet('Hoja1')
for i in range(sheet.nrows):
data = [sheet.cell_value(i, col) for col in range(sheet.ncols)]
for index, value in enumerate(data):
if value in dictForReplacement.keys():
new_sheet.write(i, index, str(dictForReplacement.get(value)))
else:
new_sheet.write(i, index, value)
new_workbook.save(ExcelNewName+'.xls')
这是我没有 Ktinder 的代码,因为它是一个 GUI,我知道这里不需要它
所以现在你也可以运行了。
edit4: 接下来3行错了 我不知道如何在这里添加一个 excel 文件,最大的问题是带有 / 的字符串,所以只需创建一个页面并让一个单元格成为: Estigfend /100Sin calificación
edit2:有人说 excel 肯定在添加其他内容,我会调查一下
编辑3:
是隐形字符!
我的错误,dict.keys() 显然工作正常,但是当打印没有键的值时(当我知道我有所有可能的选项作为键时),我看到它们看起来就像我的钥匙,但由于不可见字符,它们不一样!!!
我更改了部分代码以获取所有错误值的列表,使用 else,然后在此列表的 for 中应用 print(repr(value)) 以查看不可见字符
看到这个:
所以我的 Excel 很奇怪,正如@CollinHeist 之前在评论中所说的那样,它做到了
dictForReplacement[r"Estigfend\xa0/100Sin calificación"] = "NP"
感谢评论者