簡體   English   中英

使用 Python 讀取 .txt 或 .csv 格式的 .xlsx

[英]Read .xlsx in .txt or .csv format with Python

有沒有辦法用 Python 讀取.txt.csv格式的.xlsx文件? 尋找一種在保留數字格式的同時讀取.xlsx文件的方法(例如,45.890924 美元)。 四處搜索,找不到一個可行的模塊,並且以我的 Python 技能水平創建樣式轉換器幾乎是不可能的。

一些有用的注釋,Pandas 不是一個選項,因為它會自動擦除數字格式,而且我無法提前對列的格式進行分類,因為一列可以包含 20 多種不同的數字格式。

openpyxl將單元格的內容存儲在value中,並將格式存儲在number_format中(以及對齊、顏色、字體、邊框等的其他一些屬性)。 因此,您可以解釋 Excel 格式代碼並將其轉換為 Python 格式 - 但是

  1. 當然,一些格式屬性在 CSV 中沒有意義:例如,您不能在 CSV 中將負數設為紅色
  2. 雖然日期和時間的 Excel 格式代碼相對容易處理,但數字的格式代碼可能非常難以破譯。 例如,這是歐元的標准貨幣格式字符串:
'_-* #,##0.00\ [$€-410]_-;\-* #,##0.00\ [$€-410]_-;_-* "-"??\ [$€-410]_-;_-@_-'

綜上所述,做翻譯並非不可能。 下面是將 Excel 日期格式字符串轉換為 Python 的strftime()指令的簡單函數。

def date_xl2py(dt, xlcode):
    xl2py = {
        'yy' : '%y',
        'yyyy' : '%Y',
        'm' : '%m', ##always zero-padded
        'mm' : '%m',
        'mmm' : '%b',
        'mmmm' : '%B',
        'mmmmm' : '%b', ##no single letter form
        'd' : '%d', ##always zero-padded
        'dd' : '%d',
        'ddd' : '%a',
        'dddd' : '%A',
        '%' : '%%' ##escape the % char
        }
    pycode = []
    for xlpart in findall(r'[d|m|y|h|s]+|.|(".+")', xlcode):
        if xlpart in xl2py:
            pycode.append(xl2py[xlpart])
        else:
            pycode.append(xlpart)
    return ''.join(pycode)

dt = datetime(2022,7,12,15,56)
dt.strftime(date_xl2py(dt, 'ddd, mmmm dd, yyyy'))          
'Tue, July 12, 2022'

請注意,我沒有考慮語言環境的規范。

此外,Excel 提供了 Python 中不可用的三個(相當無用的)日期格式選項(請參閱代碼中的注釋):我只是將它們映射到最相似的可用選項。

最后,如果要添加時間格式,則需要處理“mm”在 Excel 中可能是月或分鍾的事實,並根據上下文選擇正確的選項。

暫無
暫無

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

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