python - 在python中写入CSV文件时如何保持前导零
问题描述
我有一些代码可以读取 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 用户),所以我不能仔细检查,但是quoting=csv.QUOTE_ALL
在创建编写器时传递应该可以解决问题(这将在所有数字周围添加引号字符,因此 excel 应该将它们视为字符串和别管他们)
文档:https ://docs.python.org/3/library/csv.html#csv.writer
注意:如果您只想引用某些字段,则必须在构建fileDict
.
推荐阅读
- composer-php - 作曲家需要“结论” - 如何阅读和修复
- ajax - 在 Ajax URL 中传递参数
- powershell - 为什么导出的文件是空白的?
- docker - 新浏览器无法在带有 Docker 的服务器上的 Robot Framework 中运行
- mysql - 我正在尝试在下订单时更新产品数量,但 sql 在尝试获取当前值时返回垃圾值
- python - 如何让discord bot适应其他服务器?
- sql - 用 rownum 更新列的最快方法
- flutter - 我无法在 dart 中定义带有 $ 的字符串
- html - 如何修复“可聚焦元素的名称属性不能为空”
- c# - 有没有办法在 xamarin.uitest 中设置时间格式?