我有一些代码可以读取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
中,我可以看到要添加的前导零。但是,在CSV文件中,我得到以下信息:
Hour
1
我希望它为:
Hour
01
谢谢。
答案 0 :(得分:3)
您的问题与Python的csv模块无关(因为您会发现直接在代码编辑器中读取csv文件),但是与Excel一样考虑了无引号的数字。
我既不使用Excel,也不使用Excel(此处为Linux用户),所以我无法仔细检查,但是在创建writer时传递quoting=csv.QUOTE_ALL
应该可以解决此问题(这将在所有数字周围加上引号字符因此excel应该将它们视为字符串,不要理会它们)
文档:https://docs.python.org/3/library/csv.html#csv.writer
注意:如果只想引用某些字段,则在构建fileDict
时必须手动进行。
答案 1 :(得分:0)
我在另一个答案中找到了这个,它对我有用:
df['column']=df['column'].apply('="{}"'.format)