簡體   English   中英

在python中寫入CSV文件時如何保持前導零

[英]How to keep leading zeros when writing to CSV file in python

我有一些代碼讀取 HTML 文件列表,從每個文件中獲取一些信息,然后將它們呈現在 CSV 文件中。

其中一部分是使用文件名中的數字來顯示該行數據來自哪個小時(例如文件名是 Report_H1.html)。 但是,為了讓它們以正確的順序顯示,我用 0 填充了每個數字,使它們都保留 2 個小數位。

將這些寫入 CSV 文件時,將刪除前導 0。 我怎樣才能防止這種情況發生?

將代碼編輯為導致我的問題的部分:

import re
import csv
import os

BASE_DIRECTORY = "C:\\Users\\MHE36\\Documents"
fileList = []

for (dirpath, dirnames, filenames) in os.walk(BASE_DIRECTORY):
    for f in filenames:
        if 'html' in str(f):
            e = os.path.join(str(dirpath), str(f))
            boxName = os.path.dirname(e)
            box = os.path.basename(boxName)
            fileDict = {}
            fileList.append(fileDict)
            match = re.search(r'\d+', f)
            if match:
                fileDict['Hour'] = str(match.group(0).zfill(2))

with open('C:\\Users\\MHE36\\Documents\\test.csv', 'w') as f:
    w = csv.DictWriter(f, ['Hour'])
    w.writeheader()
    for fileDict in fileList:
        w.writerow(fileDict)

print(fileList)
print(fileDict)

這是打印命令的輸出:

[{'Hour': '01'}, {'Hour': '10'}, {'Hour': '11'}, {'Hour': '12'}, {'Hour': '13'}, {'Hour': '14'}, {'Hour': '15'}, {'Hour': '16'}, {'Hour': '02'}, {'Hour': '03'}, {'Hour': '04'}, {'Hour': '05'}, {'Hour': '06'}, {'Hour': '07'}, {'Hour': '08'}, {'Hour': '09'}, {'Hour': '01'}, {'Hour': '02'}, {'Hour': '03'}, {'Hour': '04'}, {'Hour': '05'}]
{'Hour': '05'}

在上面的print s 中,我可以看到正在添加前導零,因為我想要它們。 但是,在 CSV 文件中,我得到以下信息:

Hour                
1   

我想要它:

Hour                
01  

提前致謝。

您的問題與 Python 的 csv 模塊無關(因為您會發現直接在代碼編輯器中讀取 csv 文件),但 Excel 將未加引號的數字視為數字。

我沒有使用也沒有 Excel(這里是 linux 用戶)所以我不能仔細檢查,但是在創建 writer 時傳遞quoting=csv.QUOTE_ALL應該可以解決這個問題(這會在你的所有數字周圍添加引號字符,所以 excel 應該將它們視為字符串,不要管它們)

文檔: https : //docs.python.org/3/library/csv.html#csv.writer

注意:如果您只想引用某些字段,則必須在構建fileDict時手動執行此操作。

我在另一個答案中找到了這個,它對我有用:

df['column']=df['column'].apply('="{}"'.format)

暫無
暫無

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

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