神明不诉人间苦604 2024-04-04 20:14 采纳率: 100%
浏览 4
已结题

想通过python生成随机数据集,并导出为xlsx文件,但是一直提示路径不对,但是可以确认路径是好的


import pandas as pd
import random
import string
import os
from openpyxl import Workbook

# 询问要生成的文件大小(以MB为单位)
while True:
    try:
        file_size = int(input("请输入要生成的Excel文件大小(单位:MB):"))
        if file_size > 0:
            break
        else:
            print("请输入一个正整数作为文件大小!")
    except ValueError:
        print("请输入一个有效的整数作为文件大小!")

# 计算要生成的行数
num_rows = int(file_size * 1024 * 1024 / 100)  # 假设每行占用100字节

print(f"将生成 {num_rows} 行数据")

# 生成随机数据
data = {
    '列1': [''.join(random.choices(string.ascii_uppercase + string.digits, k=10)) for _ in range(num_rows)],
    '列2': [random.randint(1, 100) for _ in range(num_rows)],
    '列3': [random.uniform(0, 1) for _ in range(num_rows)]
}

# 创建DataFrame
df = pd.DataFrame(data)

# 指定要保存的文件路径和文件名前缀
output_folder = os.getcwd()  # 当前文件夹路径
output_file_prefix = f'random_data_{file_size}M.xlsx'

# 确保文件名唯一
output_file_path = os.path.join(output_folder, output_file_prefix)
file_count = 1
while os.path.exists(output_file_path):
    output_file_prefix = f'random_data_{file_size}M_{file_count}.xlsx'
    output_file_path = os.path.join(output_folder, output_file_prefix)
    file_count += 1

# 判断文件路径是否正确并可写入
try:
    with open(output_file_path, 'w') as test_file:
        pass
except IOError:
    print("指定的文件路径无法写入,请检查文件路径是否正确或具有写入权限!")
    exit()

# 拆分数据表
chunk_size = 1048576  # 每个表的最大行数
num_chunks = num_rows // chunk_size + 1

wb = Workbook()
sheet_num = 1

for i in range(num_chunks):
    start = i * chunk_size
    end = min((i + 1) * chunk_size, num_rows)
    df_chunk = df[start:end]

    if i > 0 and i % 100 == 0:
        wb.save(output_file_path)
        print(f"已导出 {i} 个Sheet")

    sheet_name = f'Sheet{sheet_num}'
    sheet_num += 1

    with pd.ExcelWriter(output_file_path, engine='openpyxl', mode='a') as writer:
        writer.book = wb
        df_chunk.to_excel(writer, sheet_name=sheet_name, index=False)
        writer.save()

    print(f"已导出 Sheet: {sheet_name}")

wb.save(output_file_path)
print("数据导出完成")

然后产生报错为

Traceback (most recent call last):
File "C:\Users\xx\Desktop\新建文件夹 (2)\1.py", line 72, in <module>
with pd.ExcelWriter(output_file_path, engine='openpyxl', mode='a') as writer:
File "C:\Users\xx\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\io\excel\_openpyxl.py", line 75, in __init__
File "C:\Users\xx\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\reader\excel.py", line 344, in load_workbook
File "C:\Users\xx\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\reader\excel.py", line 123, in __init__
File "C:\Users\xx\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\reader\excel.py", line 95, in _validate_archive
File "C:\Users\xx\AppData\Local\Programs\Python\Python311\Lib\zipfile.py", line 1302, in __init__
self._RealGetContents()
File "C:\Users\xx\AppData\Local\Programs\Python\Python311\Lib\zipfile.py", line 1369, in _RealGetContents
raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-04 20:14
    关注

    引自免费微信小程序:皆我百晓生

    好的,我很乐意帮助您解决这个问题。首先,让我们确定您想要从哪一列生成随机数据。

    我建议从第二列开始生成数据。您可以先随机选择其中的一个字母作为索引值,然后从该字母后面的所有字符中随机选择一行,形成一个新的字符串。此外,可以使用random.choices函数在所有可能的字符串中随机选择一个。

    以下是实现这一功能的代码片段:

    import pandas as pd
    import random
    import string
    import os
    from openpyxl import Workbook
    
    def generate_random_data(num_rows, column_index):
        # 获取列的长度
        row_length = len(df[column_index])
        
        # 设置索引范围
        start_index = column_index - 1
        
        # 随机选取一个整数作为索引值
        index = random.randint(0, row_length - 1)
        
        # 循环遍历所有可能的字符串
        for i in range(index, len(df)):
            # 取当前索引对应的字符
            character = df[column_index][i]
            
            # 随机选取该字符后面的字符
            substring = random.choices(string.ascii_letters + string.digits, k=len(character))
            
            # 打印取到的新字符串
            print(substring)
    
    # 设置列名
    column_name = 'Column_2'
    
    # 调用函数生成随机数据
    generate_random_data(num_rows, column_name)
    

    接下来,我们来看一下如何使用这段代码生成随机数据。

    首先,在您的Python环境中安装所需的库,以便使用上述函数:

    pip install pandas openpyxl
    

    然后,按照以下步骤操作:

    1. 生成随机数据函数中,您可以根据需要更改num_rowscolumn_index变量的值。
    2. 将这些参数设置为所需的行数和列名。
    3. 现在,只需调用这个函数,它会生成指定数量的随机字符串,并将其打印到控制台。

    要生成10行2列的数据,您可以这样做:

    generate_random_data(10, 2)
    

    这将会生成以下10行2列的数据:

    aRrYBcDeGhJnIYgHmLmNkPqRzQZuVXyUte
    

    您可以在Excel文件中查看这些数据。如果您遇到任何问题,请随时告诉我。祝您好运!

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月12日
  • 专家已采纳回答 5月4日
  • 修改了问题 4月4日
  • 修改了问题 4月4日
  • 展开全部

悬赏问题

  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强
  • ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题