2016-06-22 300 views
1

我目前正在將文件從csv轉換爲xlsx。問題是數據默認全部轉換爲字符串。如何將數字(通常顯示爲+ 1.500000000E + 009或「+ 1.50000000000E + 009」(前導空格)從字符串轉換爲數字表示形式)我試過類型轉換和常規變通方法,但沒有任何效果。 「IF」 語句是因爲csv文件具有標題。Python;科學記法字符串編號

def csv_to_excel(csv_path, delimiter, delimiter_txt, excel_path, excel_title): 
csv_file = open(csv_path, 'r') 
csv.register_dialect(delimiter_txt, delimiter=delimiter) 

reader = csv.reader(csv_file, dialect=delimiter_txt) 

wb = Workbook() 

ws = wb.worksheets[0] 
ws.title = excel_title 
for row_index, row in enumerate(reader): 
    for column_index, cell in enumerate(row): 
     column_letter = get_column_letter((column_index + 1)) 
     if row_index > 3: 
      ws.cell('%s%s'%(column_letter, (row_index + 1))).value = float(cell) 
     else: 
      ws.cell('%s%s'%(column_letter, (row_index + 1))).value = cell 
     print(cell) 
     print(type(cell)) 
wb.save(filename = excel_path) 
csv_file.close() 

csv_to_excel( 'FILE.CSV', '', '逗號', 'file.xlsx', '數據')

謝謝!任何幫助將是偉大的!

+0

'浮動( '+ 1.50000000000E + 009')'工作 –

+0

看起來你已經在使用'浮動(細胞)'這就是目前的答案是暗示。那它不起作用呢? –

+0

類型轉換應該可行 - 正如答案所暗示的那樣。難道你的第二個'ws.cell = ...'沒有像第一個那樣的類型轉換操作嗎?你有一個'ws.cell ... = float(cell)',另一個只是'ws.cell ... = cell' – MadisonCooper

回答

1

你可以使用float()

>>> float("+1.50000000000E+009") 
>>> 1500000000.0 
0

應該使用float()

float("+1.50000000000E+009") 

你也可以使用eval(),但是這可能是潛在的危險,如果你不知道某些輸入的類型,你就可以作爲參數傳遞。

eval("+1.50000000000E+009") 

兩個返回1500000000.0

+1

如果你知道這將是一個數字,我會建議不要使用'eval()',因爲你接受來自潛在不可信來源的輸入。對於這種情況,任意執行漏洞的風險似乎並不值得,因爲float()工作原理相同。 – arewm

+0

@arewm我傾向於同意,因爲'eval()'確實評估python表達式,所以我會更新我的答案。 – ospahiu

+0

'float()'是要走的路。 'eval()'易受代碼注入的影響。本身就好像使用'float()'。 – Alexander

相關問題