Python - 在 Excel 中保存一列,其中包含大量具有随机 UUID 的行

Python - save a column in Excel with a lot of rows with random UUIDs

我有以下代码:

import xlsxwriter
import numpy as np
import pandas as pd
import random
import uuid
LIMIT=1000
workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()
for row in range(0,LIMIT):
    worksheet.write_column(row, 0, uuid.uuid4())
    row += 1
workbook.close()

我收到以下错误:

TypeError: 'UUID' object is not iterable

我尝试使用 str() 将 UUID 转换为字符串,但出于某种原因,这只会给我 excel sheet 中的单个数字或字母。

您遇到的问题是您混合了 2 个不同的函数(worksheet.write()worksheet.write_column())。

如果你想使用worksheet.write_column(),你需要有一个可迭代的数据。
该函数所做的是一个一个地遍历可迭代元素并填充列直到完成。使用您当前拥有的代码,您的 uuid.uuid4() 是一个字符串,因此是一个可迭代的。所以这个函数每行放一个字符。如果你想要每行一个完整的 UUID,你需要创建一个 UUID 列表。请参阅下面的示例。

LIMIT=1000
workbook = xlsxwriter.Workbook('test2.xlsx')
worksheet = workbook.add_worksheet()
uuid_list = [str(uuid.uuid4()) for _ in range(LIMIT)]
worksheet.write_column(0, 0, uuid_list)
workbook.close()

如果循环对您来说更有意义,那么您需要使用 worksheet.write()。它很可能会慢得多,但对于 1000 个或更多的字符串,您可能看不到差异。

LIMIT=1000
workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()
for row in range(LIMIT):
    worksheet.write(row, 0, str(uuid.uuid4()))
    row += 1
workbook.close()

您可以直接在 xlsxwriter package documentation

中获取更多信息

表现:
为了解决评论性能问题,这是我发现的: 对于一百万行:
worksheet.write_column():整体55s,创建百万UUID 5s,写入数据50s。
worksheet.write(): 总计35秒,比写专栏还快,我很惊讶...
df.to_csv():创建一个 Dataframe 并将其写入 CSV 或 excel 文件要快得多(我的测试说 7-8 秒,5 秒创建百万 UUID,2 秒将数据帧写入CSV)

使用数据帧执行此操作的代码:

import pandas as pd
LIMIT = 1_000_000
uuid_list = [str(uuid.uuid4()) for _ in range(LIMIT)]
df = pd.DataFrame({"column1": uuid_list})
df.to_csv("test.csv")