[英]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.