[Python]將字串轉變成正確的型態

Posted by John on 2018-03-07
Words 339 and Reading Time 1 Minutes
Viewed Times

最近在實作某個作業的時候遇到這樣的問題,我用read_csv()將資料讀進來了,但是因為讀進來後都會變成str的型態,我想要把他們自動轉成正確的資料型態,例如,有一筆list如下:

["hello","100","3.14"]

我想要把它轉換成:

["hello",100,3.14]

並且它的type分別是str int float

可是我要如何知道list內的元素到底是哪種型態,並且轉換它呢?

上網查了之後發現有兩個方式:

  1. 使用eval()這個function,它的功用原本是將作為參數的字串當作指令執行,不過也可以透過它達成自動轉換型態。

使用方式如下:

1
2
3
x = '7'
a = eval(x)
print(type(a)) #int

詳細使用方式可以參考這篇:

http://www.runoob.com/python/python-func-eval.html

2.ast.liter_eval(),這個也可以達到上面的結果,和eval()的差別在於eval()如果無法進行轉換會出現例外訊息,而ast.liter_eval()會先檢查,如果無法進行轉換則不會轉換”,使用前須import ast

最終我採用了第二種方式,並且寫成function的形式:

1
2
3
4
5
6
7
8
9
import ast
def type_converter(string_list): #change str to correct type
coverted_list = []
for i in string_list:
try:
coverted_list.append(ast.literal_eval(i))
except:
coverted_list.append(i) #some still with str type (ex:date、chinese)
return coverted_list


>