鱼C论坛

 找回密码
 立即注册
查看: 231|回复: 6

请问为什么执行一个简单的for语句就卡死,没有任何报错.....

[复制链接]
发表于 2024-3-14 14:54:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Python:

Python 3.11.6 (tags/v3.11.6:8b6ee5b, Oct  2 2023, 14:57:12) [MSC v.1935 64 bit (AMD64)] on win32


Pyside6:

Name: PySide6
Version: 6.6.2                                                                 
Summary: Python bindings for the Qt cross-platform application and UI framework
Home-page:                                                                     
Author:                                                                        
Author-email: Qt for Python Team <pyside@qt-project.org>                       
License: LGPL                                                                  
Location: D:\Tools\Python\Lib\site-packages                                    
Requires: PySide6-Addons, PySide6-Essentials, shiboken6


请问为什么执行下列红色的for语句就会卡死?  没有任何报错,就是卡半天,然后说程序失去响应。。。。

       def exclude_rows_and_cols(self, exclude_rows_and_cols):
        if self.File_Type == 'xls':
            file_name = "123.xls"
            # 拼接文件路径
            file_path = os.path.join(self.File_Path, file_name)
            Exclud_Book = xlrd.open_workbook(file_path)
        else:
            file_name = "123.xlsx"
            # 拼接文件路径
            file_path = os.path.join(self.File_Path, file_name)
            Exclud_Book = load_workbook(file_path)

        print('《123》共有', len(Exclud_Book.sheet_names()), '个工作表(sheet)。名称分别为:', Exclud_Book.sheet_names())

       for sheet_name in Exclud_Book.sheet_names():

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-14 14:55:40 | 显示全部楼层
可能是因为打开的Excel文件非常大,导致程序执行for循环时需要处理大量的数据,而这些数据量过大导致程序卡死。你可以尝试使用以下方法解决这个问题:

1. 确保你的计算机足够强大,有足够的内存和处理能力来处理大型文件。
2. 尝试使用更高效的库来读取Excel文件,例如pandas库,它可以更快地读取大型Excel文件。
3. 如果文件中的数据量确实很大,并且你只需要部分数据,可以考虑使用分块读取的方法,逐块处理数据,而不是一次性全部加载。
4. 检查你的代码中是否有其他地方造成死循环或者无限循环,导致程序卡住。

希望以上方法能帮助到你解决问题!如果问题仍然存在,请提供更多的代码和环境信息,以便我们更好地帮助你。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-14 14:58:12 | 显示全部楼层
FishC 发表于 2024-3-14 14:55
可能是因为打开的Excel文件非常大,导致程序执行for循环时需要处理大量的数据,而这些数据量过大导致程序卡 ...

数据库并不大。。。。也才两个sheet、  几十条数据

关掉这一句时,执行程序的其他部分都很正常;

只有执行到这一句时,就卡住了。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-14 14:58:24 | 显示全部楼层
yxxxzx123 发表于 2024-03-14 14:58
数据库并不大。。。。也才两个sheet、  几十条数据

...


抱歉,我误解了你的问题。根据你提供的代码,我看到你使用的是xlrd和openpyxl库来读取Excel文件。有时候这些库在处理某些特殊格式的Excel文件时可能会导致程序卡死。

为了解决这个问题,可以尝试以下方法:

1. 确保你的xlrd和openpyxl库是最新的版本,可以通过pip升级它们:

  
  1. pip install --upgrade xlrd openpyxl
复制代码


2. 尝试使用其他的Excel处理库,例如pandas库。Pandas库对于大型Excel文件的读取速度更快,且操作更简洁。你可以尝试以下代码:

  
  1. import pandas as pd

  2.    if self.File_Type == 'xls':
  3.        file_name = "123.xls"
  4.    else:
  5.        file_name = "123.xlsx"

  6.    file_path = os.path.join(self.File_Path, file_name)
  7.    df = pd.read_excel(file_path, sheet_name=None)
  8.    sheet_names = df.keys()
  9.    for sheet_name in sheet_names:
  10.        sheet_data = df[sheet_name]
  11.        # 处理每个工作表的数据
复制代码


   这样,你可以通过`read_excel`函数一次性读取整个Excel文件,并以字典形式返回各个工作表的数据,然后可以对每个工作表的数据进行处理。

希望以上方法能够解决你的问题。如果还有其他疑问,请提供更多的代码和环境信息,以便我们更好地帮助你。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-14 15:16:38 | 显示全部楼层
换了pandas 库,  还是一到for语句就卡死。。。


什么原因啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-14 15:16:56 | 显示全部楼层
yxxxzx123 发表于 2024-03-14 15:16
换了pandas 库,  还是一到for语句就卡死。。。


...


非常抱歉听到你的问题仍然存在。如果在使用pandas库之后仍然卡死,问题可能不在于Excel文件的读取,而是在循环过程中出现了某种问题。这可能有以下几个原因:

1. 内存问题:如果你的数据量非常大,循环过程中可能会占用大量的内存,导致程序卡死。你可以尝试限制一次性加载的数据量,例如逐行或逐批读取数据进行处理,而不是一次性全部加载。

2. 循环逻辑问题:检查一下你在循环体内的代码逻辑是否正确。特别是在处理每个工作表数据的过程中,确保没有陷入无限循环或者其他死循环。

3. 其他耗时操作:检查一下在循环内部是否有其他耗时操作,例如网络请求、复杂的计算等。这些操作可能会导致程序卡死。

4. 外部依赖问题:检查一下循环内部是否有调用其他函数或模块的操作,这些函数或模块可能存在问题,导致程序卡死。

针对以上问题,你可以逐步排查并测试代码。通过在循环内部打印日志或使用调试工具来定位问题所在。另外,提供更多的代码和相关环境信息可以帮助我们更好地理解问题,以便给出更具体的解决方案。祝你好运!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-14 15:20:53 | 显示全部楼层
3. 其他耗时操作:检查一下在循环内部是否有其他耗时操作,例如网络请求、复杂的计算等。这些操作可能会导致程序卡死。

有没有网络请求要怎么复查?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 18:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表