gpt4 book ai didi

python - 如何使用python从 'utf-8'数据创建excel文件时更正编码

转载 作者:行者123 更新时间:2023-12-04 20:40:26 29 4
gpt4 key购买 nike

我正在尝试使用 python 从字典列表中创建一个 excel 文件。最初我收到编码不当的错误。所以我将我的数据解码为“utf-8”格式。现在创建 excel 后,当我检查每个字段中的值时,它们的格式已更改为纯文本。以下是我在使用一段代码执行此事件时使用的 stpes。

1.>我在创建excel文件时遇到编码不正确的错误,因为我的数据中有一些'ascii'值。错误片段:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 16: ordinal not in range(128)

2.>为了消除编码不当的错误,我在读取我的输入csv文件时插入了一个decode()函数。解码为“utf-8”时的代码片段:
data = []
with open(datafile, "r") as f:
header = f.readline().split(',')
counter = 0
for line in f:
line = line.decode('utf-8')

fields = line.split(',')
entry = {}
for i,value in enumerate(fields):
entry[header[i].strip()] = value.strip()
data.append(entry)
counter += 1

return data

3.>插入 decode() 函数后,我使用以下代码创建了我的 excel 文件:
ordered_list= dicts[0].keys() 

wb=Workbook("New File.xlsx")
ws=wb.add_worksheet("Unique")

first_row=0
for header in ordered_list:
col=ordered_list.index(header)
ws.write(first_row,col,header)

row=1
for trans in dicts:
for _key,_value in trans.items():
col=ordered_list.index(_key)
ws.write(row,col,_value)
row+=1 #enter the next row
wb.close()

但是在创建 excel 之后,excel 的每个字段中的所有值都带有文本格式,而不是它们的原始格式(一些日期时间值、十进制值等)。如何确保数据格式不会从我使用输入 csv 文件读取的输入数据格式改变?

最佳答案

读取文本文件时,应将编码传递给 open()这样它就会自动为您解码。

Python 2.x:

with io.open(datafile, "r", encoding="utf-8") as f:

Python 3.x:
with open(datafile, "r", encoding="utf-8") as f:

现在读取的每一行都是一个 Unicode 字符串。

在阅读 CSV 文件时,您可能需要考虑了解 CSV 方言的 CSV 模块。它将自动返回每行的字典,由标题键入。在 Python 3 中,它只是 csv模块。在 Python 中,CSV 模块被非 ASCII 破坏。使用 https://pypi.python.org/pypi/unicodecsv/0.13.0

获得干净的 Unicode 字符串后,您可以继续存储数据。

Excel 格式要求您告诉它您存储的数据类型。如果将时间戳字符串放入单元格中,它会认为它只是一个字符串。如果您插入一个整数字符串,这同样适用。

因此,在添加到工作簿之前,您需要在 Python 中转换值类型。

将十进制字符串转换为浮点数:
 my_decimal = float(row["height"])
ws.write(row,col,my_decimal)

从字符串创建日期时间字段。假设字符串是“Jun 1 2005 1:33PM”:
date_object = datetime.strptime(my_date, '%b %d %Y %I:%M%p')
ws.write(row,col,date_object)

关于python - 如何使用python从 'utf-8'数据创建excel文件时更正编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34858941/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com