2013-07-28 6 views
0

У меня есть 2-мерный список списков, которые мне нужно искать на основе первого поля записи, содержимое - это строки, которые включают символ прямой косой черты.Невозможно сравнить строку в списке с символом '/'

При тестировании arg_size поиск всегда терпит неудачу, если присутствует символ прямой косой черты. Я жестко закодировал аргументы для устранения неполадок.

Заранее спасибо.

# -*- coding: UTF-8 -*- 
bolt = {} # create empty dictionary 
thread_geometry = {} # create empty dictionary 

# variables for record position 
size = 0 
dia_in = 1 
dia_mm = 2 
tpi_UNC = 3 
pitch_UNC_in = 4 
pitch_UNC_mm = 5 
tpi_UNF = 6 
pitch_UNF_in = 7 
pitch_UNF_mm = 8 
tpi_UNEF = 9 
pitch_UNEF_in = 10 
pitch_UNEF_mm = 11 

# lookup table for bolt standards,negative values represents NULL 
bolt_table = [ 
     [r"#0", 0.06, 1.524, -1, -1, -1, 80, 0.0125, 0.3175, -1, -1, -1 ], 
     [r"#1", 0.073, 1.8542, 64, 0.015625, 0.3969, 72, 0.013888, 0.3528, -1, -1, -1 ], 
     [r"#2", 0.086, 2.1844, 56, 0.017857, 0.4536, 64, 0.015625, 0.3969, -1, -1, -1 ], 
     [r"#3", 0.099, 2.5146, 48, 0.020833, 0.5292, 56, 0.017857, 0.4536, -1, -1, -1 ], 
     [r"#4", 0.112, 2.8448, 40, 0.025, 0.635, 48, 0.020833, 0.5292, -1, -1, -1 ], 
     [r"#5", 0.125, 3.175, 40, 0.025, 0.635, 44, 0.022727, 0.5773, -1, -1, -1 ], 
     [r"#6", 0.138, 3.5052, 32, 0.03125, 0.7938, 40, 0.025, 0.635, -1, -1, -1 ], 
     [r"#8", 0.164, 4.1656, 32, 0.03125, 0.7938, 36, 0.027778, 0.7056, -1, -1, -1 ], 
     [r"#10", 0.19, 4.826, 24, 0.041667, 1.0583, 32, 0.03125, 0.7938, -1, -1, -1 ], 
     [r"#12", 0.216, 5.4864, 24, 0.041667, 1.0583, 28, 0.035714, 0.9071, 32, 0.03125, 0.7938 ], 
     [r"1/4", 0.25, 6.35, 20, 0.05, 1.27, 28, 0.035714, 0.9071, 32, 0.03125, 0.7938 ], 
     [r"5⁄16", 0.3125, 7.9375, 18, 0.055556, 1.4111, 24, 0.041667, 1.0583, 32, 0.03125, 0.7938 ], 
     [ur"3⁄8", 0.375, 9.525, 16, 0.0625, 1.5875, 24, 0.041667, 1.0583, 32, 0.03125, 0.7938 ], 
     [r"7⁄16", 0.4375, 11.1125, 14, 0.071428, 1.8143, 20, 0.05, 1.27, 28, 0.035714, 0.9071 ], 
     [r"1⁄2", 0.5, 12.7, 13, 0.076923, 1.9538, 20, 0.05, 1.27, 28, 0.035714, 0.9071 ], 
     [r"9⁄16", 0.5625, 14.2875, 12, 0.083333, 2.1167, 18, 0.055556, 1.4111, 24, 0.041667, 1.0583 ], 
     [r"5⁄8", 0.625, 15.875, 11, 0.090909, 2.3091, 18, 0.055556, 1.4111, 24, 0.041667, 1.0583 ], 
     [r"3⁄4", 0.75, 19.05, 10, 0.1, 2.54, 16, 0.0625, 1.5875, 20, 0.05, 1.27 ], 
     [r"7⁄8", 0.875, 22.225, 9, 0.111111, 2.8222, 14, 0.071428, 1.8143, 20, 0.05, 1.27 ], 
     [r"1", 1, 25.4, 8, 0.125, 3.175, 12, 0.083333, 2.1167, 20, 0.05, 1.27 ], 
     ] 



# # # # ------------------- Main -------------------------------------------- # # # # 


# Get bolt parameters 
# if the no value is entered the value will be NULL or set to a default 

arg_unit = 'mm' 
if arg_unit.lower() == 'mm': 
    bolt['unit'] = 'mm' 
else: 
    bolt['unit'] = 'in' 

arg_size = '3/8' 
for x in bolt_table: 
    if str(x[size]) == str(arg_size): 
     bolt['size'] = str(arg_size) 

arg_length = 2.5 
if arg_length > 0: 
    bolt['length'] = arg_length 
else: 
    sys.stderr.write(" Bolt length is a required field!!!") 
    sys.exit() 

arg_thread = 'UNC' 
if arg_thread.upper() == 'UNC' or arg_thread.upper() == 'UNF' or arg_thread.upper() == 'UNEF': 
    bolt['thread'] = arg_thread.upper() 

print bolt.viewitems() 
+0

Когда я смотрю на значения в отладчике я вижу, что значение в списке изменяется от '3/8' u'3 \ u20448 '. Я попытался префикс строки как r, u, так и ur, но я получаю те же результаты. – salatwork

ответ

1

Слэш на клавиатуре не совпадает с косой чертой на вашем столе. Существуют разные символы. Изменить таблицу, чтобы заменить Юникода косую черту ASCii слэш или использовать нормировки решение из How to read Unicode input and compare Unicode strings in Python?

Я думаю, что вы скопировать и вставить значения из таблицы из Интернета)

+0

Да, я скопировал таблицу с веб-сайта википедии. Я вернулся и перепечатал косые черты, и теперь код работает. Спасибо. – salatwork

+0

@ user2626658, так что принимайте ответ – eri

Смежные вопросы