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")
我有以下代码:
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")