簡體   English   中英

將字符串轉換為元組並添加到元組

[英]Converting string to tuple and adding to tuple

我有這樣的配置文件。

[rects]
rect1=(2,2,10,10)
rect2=(12,8,2,10)

我需要遍歷值並將它們轉換為元組。 然后,我需要制作一個元組的元組

((2,2,10,10), (12,8,2,10))

您也可以使用ast模塊的literal_eval函數,而不是使用正則表達式或int /字符串函數,該函數僅計算有效Python文字的字符串。 這個功能是安全的(根據文檔)。 http://docs.python.org/library/ast.html#ast.literal_eval

import ast
ast.literal_eval("(1,2,3,4)") # (1,2,3,4)

而且,和其他人一樣, ConfigParser可以解析INI文件。

要將字符串轉換為整數元組(也就是我假設你想要的東西),你可以使用這樣的正則表達式:

x = "(1,2,3)"
t = tuple(int(v) for v in re.findall("[0-9]+", x))

您可以使用configparser來解析配置文件。

考慮到cp是具有配置的cfg文件的ConfigParser對象。

[rects]
rect1=(2,2,10,10)
rect2=(12,8,2,10)


>> import ast 
>> tuple(ast.literal_eval(v[1]) for v in cp.items('rects')) 
   ((2,2,10,10), (12,8,2,10))

編輯:將eval()更改為更安全的版本literal_eval()
從python docs - literal_eval()執行以下操作:
安全地評估表達式節點或包含Python表達式的字符串。 提供的字符串或節點可能只包含以下Python文字結構: 字符串,數字,元組,列表,dicts,布爾值和None

你可以簡單地創建一個像元組一樣的元組

new_tuple = (rect1,rect2) # ((2,2,10,10), (12,8,2,10))

如果要循環遍歷值

for i in rect1+rect2:
    print i

如果你想重新組合你可以做的數字

 tuple_regrouped = zip(rect1,rect2) #((2,12),(2,8),(10,2), (10,10))

編輯:沒有注意到字符串部分。 如果你有字符串中的行,比如讀取配置文件,你可以做類似的事情

 # line = "rect1 = (1,2,3,4)"
 config_dict = {}     
 var_name, tuple_as_str = line.replace(" ","").split("=")
 config_dict[var_name] = tuple([int(i) for i in tuple_as_str[1:-1].split(',')])
 # and now you'd have config_dict['rect1'] = (1,2,3,4)

最簡單的方法是使用Michael Foord的ConfigObject庫。 它有一個unpr模式 ,可以直接將字符串轉換為元組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM