簡體   English   中英

將.csv文件中的混合數據寫入帶有xlwt的.xls - 如何格式化數字?

[英]writing mixed data from a .csv file to an .xls with xlwt - how to format numbers?

我正在嘗試從csv中讀取一堆混合數據(字符串和數字)並將所有內容寫入excel文件。 不幸的是,一切都寫成文本,因為在csv文本中是唯一的格式。 如何以正確的格式編寫數值數據? 這是我到目前為止的代碼......

import xlwt, csv

wb = xlwt.Workbook()
ws = wb.add_sheet('testSheet')

sourceCSV = csv.reader(open('sourceCSVfile.csv', 'rb'), delimiter=",")

for rowi, row in enumerate(sourceCSV):
  for coli, value in enumerate(row):
      ws.write(rowi, coli, value)
wb.save('TEST.xls') 

不知何故,根據您的數據,您需要能夠確定每個字段中的數據類型。

如果您的數據在每列中具有相同的數據類型,則可以執行以下操作:

# 5 columns: text, integer, float, float, date in YYYY-MM-DD format
import datetime
def date_conv(s):
    return datetime.datetime.strptime(s, "%Y-%m-%d")
converters = (str.strip, int, float, float, date_conv)
# use int if you want to check that it is an int.
# xlwt will convert the int to float anyway.
...
for rowi, row in enumerate(sourceCSV):
  for coli, value in enumerate(row):
      ws.write(rowi, coli, converters[coli](value))

其他可能性:

(1)看得見的方法:

def float_if_possible(strg):
    try:
        return float(strg)
    except ValueError:
        return strg
...
ws.write(rowi, coli, float_if_possible(value))

(2)分析方法:

您需要仔細編寫挑剔的正則表達式來分析您的文本,並且需要以適當的順序應用它們。

對於浮動,請考慮以下事項:

float_const_pattern = r"""
    [+-]? # optional sign
    (?:
        (?: \d* \. \d+ ) # .1 .12 .123 etc 9.1 etc 98.1 etc
        |
        (?: \d+ \. ) # 1. 12. 123. etc
        |
        (?: \d+ ) # 1 12 123 etc
    )
    # followed by optional exponent part
    (?: [Ee] [+-]? \d+ ) ?
    # followed by end of string
    \Z # don't use $
    """

隨着國旗re.VERBOSE 請特別注意“字符串結束”檢查。 如果你不這樣做,給定輸入123qwerty ,正則表達式將匹配123並且float("123qwerty")調用將引發異常。

暫無
暫無

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

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