• pycharm运行不出结果


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 2301_77497305 2024-03-30 10:29 采纳率: 50% 浏览 11 首页/ 编程语言 / pycharm运行不出结果 pythonpycharm pycharm运行不出结果,只有进程已结束退出代码为0终端运行也没有反应 ###筛选用户为熬夜还是非熬夜 import glob ##用于操作文件,用它可以查找符合特定规则的文件路径名 import os ##用来处理文件和目录 import pandas as pd ##基于NumPy 的一种工具,作用是解决数据分析任务 from datetime import datetime ##关于时间操作 import shutil ##作为os模块的补充,提供了复制、移动、删除、压缩、解压等操作 fans_max_num = 3000 #限定的最大粉丝量,粉丝量过多不具有普遍性 stay_up_start = "00:00" #熬夜开始时间 stay_up_end = "04:00" #熬夜结束时间 即0:00 - 4:00发微博的用户为熬夜用户 stay_up_ratio = 0.6 #?? stay_up_absoluted_num = 1 # 熬夜 #将字符串转换成datetime类型 def strtodatetime(datestr, format): return datetime.datetime.strptime(datestr, format) for csv_file in glob.glob('C:\Administrator\Desktop\9-1\熬夜生活满意度\weiboSpider-master\weibo\*.csv'): #读取csv文件 _, csv_file_name = os.path.split(csv_file) #os.path.split 按照路径将文件名和路径分割开,返回的结果是tuple类型 text_file_name = csv_file_name.replace(".csv", ".txt") #读取txt文件 text_file = os.path.join('C:\Administrator\Desktop\9-1\熬夜生活满意度\weiboSpider-master\weibo', text_file_name) #拼接文件路径, 可以传递多个路径 if not os.path.exists(text_file): #判断括号里的文件是否存在 print(f"{text_file}不存在text") else: pd_reader = pd.read_csv(csv_file) #读取csv文件,返回一个数据框(dataframe)文件 if "微博正文" in pd_reader: pd_reader_text_list = pd_reader["微博正文"].tolist() #如果存在微博正文,将它读取到列表中 else: pd_reader_text_list = [] with open(text_file, "r", encoding="utf-8") as f: text_file_list = f.readlines() #一行一行读取csv中内容 no_valid = 0 stay_up_weibo_num = 0 all_weibo_num = 0 for line in text_file_list: if line.startswith("粉丝数:"): fans_num = int(line.strip().lstrip("粉丝数:")) #判断粉丝数,粉丝数超过规定值不考虑,break结束循环,下一条。 if fans_num > fans_max_num: no_valid = 1 break if line.startswith("发布时间:"): release_time = line.strip().lstrip("发布时间:").split(" ")[1] local_datetime = datetime.strptime(release_time, "%H:%M") # 获取时间并将时间转为 24:00 这种形式 小时:分钟 all_weibo_num += 1 # 所有微博数+1 if datetime.strptime(stay_up_start, "%H:%M") <= local_datetime <= datetime.strptime(stay_up_end, "%H:%M"): stay_up_weibo_num += 1 # 判断时间是否位于0:00-4:00之间,是熬夜微博数+1 if no_valid or all_weibo_num == 0: continue #没找到继续找 else: try: if stay_up_weibo_num >= stay_up_absoluted_num: #熬夜用户的一组 # if stay_up_weibo_num/all_weibo_num >= stay_up_ratio: new_csv_file = os.path.join(r'C:\熬夜生活满意度\stay up\yixiancsv', csv_file_name) #创建csv文件放到D:\熬夜生活满意度\stay up\yixiancsv 文件夹中 if not os.path.exists(os.path.dirname(new_csv_file)): os.makedirs(os.path.dirname(new_csv_file)) #判断原先有无重名文件,没有创建 # os.system(f"copy {csv_file} {new_csv_file}") shutil.copy(csv_file, new_csv_file) #覆盖掉同名文件 new_text_file = os.path.join(r'C:\Administrator\Desktop\9-1\熬夜生活满意度\stay up\yixiantxt', text_file_name) #创建新的txt文件放到D:\熬夜生活满意度\stay up\yixiantxt new_weibo_text_file = os.path.join(r'C:\Administrator\Desktop\9-1\熬夜生活满意度\stay up\weibo_yixiantxt', text_file_name) #创建新的txt文件放到D:\熬夜生活满意度\stay up\wei_boyixiantxt if not os.path.exists(os.path.dirname(new_text_file)): os.makedirs(os.path.dirname(new_text_file)) if not os.path.exists(os.path.dirname(new_weibo_text_file)): ##同上 os.makedirs(os.path.dirname(new_weibo_text_file)) # os.system(f"copy {text_file} {new_text_file}") shutil.copy(text_file, new_text_file) with open(new_weibo_text_file, "w", encoding="utf-8") as f: f.write("\n".join(pd_reader_text_list)) #将之前读取的微博正文写入 else: #同上 文件夹改了个名的区别 这是没有熬夜用户的一组 new_csv_file = os.path.join(r'C:\Administrator\Desktop\9-1\熬夜生活满意度\no stay up\yixiancsv', csv_file_name) if not os.path.exists(os.path.dirname(new_csv_file)): os.makedirs(os.path.dirname(new_csv_file)) # os.system(f"copy {csv_file} {new_csv_file}") shutil.copy(csv_file, new_csv_file) new_text_file = os.path.join(r'C:\Administrator\Desktop\9-1\熬夜生活满意度\no stay up\yixiantxt', text_file_name) new_weibo_text_file = os.path.join(r'C:\Administrator\Desktop\9-1\熬夜生活满意度\no stay up\weibo_yixiantxt', text_file_name) if not os.path.exists(os.path.dirname(new_text_file)): os.makedirs(os.path.dirname(new_text_file)) if not os.path.exists(os.path.dirname(new_weibo_text_file)): os.makedirs(os.path.dirname(new_weibo_text_file)) # os.system(f"copy {text_file} {new_text_file}") shutil.copy(text_file, new_text_file) with open(new_weibo_text_file, "w", encoding="utf-8") as f: f.write("\n".join(pd_reader_text_list)) except Exception as e: print(e) #异常检测 从try:开始 到这里结束 忽略所有可能产生的异常。 我是有数据的,但是就是跑不出来 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-30 10:29
      关注

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

      当在PyCharm中运行Python代码,遇到'Process already ended'错误且进程运行结束后输出0时,这通常表示Python进程已结束,并且执行的代码中存在一些与进程结束相关的逻辑。这个问题可能涉及到以下几个方面:

      1. Python进程状态:首先,确认一下当前Python进程的状态,包括是否处于停止状态、是否有阻塞等待的代码、是否有正在使用的资源占用等。

      2. CPU使用率:检查Python的CPU使用情况,看看是否消耗了大量内存或计算资源导致Python进程长时间阻塞。可以通过查看命令行中的topps等工具显示有关Python进程的信息。

      3. 并发任务管理:如果Python进程中正在执行多线程或多进程的任务,可能存在任务之间相互等待或阻塞的情况,造成过程间切换耗时较长,进一步导致错误发生。通过查看timeit模块中的执行时间统计报告,可以查看并分析Python进程在执行哪些任务时花费的时间最长,这些任务可能是执行下载和解析网络请求、加载大数据集、运行复杂算法等耗时的操作。

      4. 资源分配:确保当前的Python环境中有足够的可用系统资源,如CPU、内存、磁盘空间等,尤其是在执行大型数据处理或并发任务时,更应该谨慎地分配资源,避免因资源不足导致程序陷入死锁或卡顿。

      5. 错误堆栈跟踪:观察整个Python运行过程中可能引发错误的函数调用顺序,以及它们对应的sys.exc_info()元组,理解抛出的异常是如何被处理的。这个元组包含了异常发生的上下文信息,可以帮助找出可能影响进程正确终止的原因。

      6. Python库错误:如果代码中使用到了某些库,例如 pandas, numpy, matplotlib, httplib2, 等,检查是否存在导致进程停止的问题。如果这些库未能正确关闭或清理相关资源,也可能导致Python进程阻塞,进而引发上述错误。

      7. 调试器和日志设置:在PyCharm中,可以启用调试器进行单步执行、查看堆栈跟踪、设置断点等功能,有助于定位和修复程序中的错误。例如,在pdb插件中添加断点到可能出现问题的位置,然后查看pdb.show_traceback()命令,了解具体的Python调用和返回值,从而推测可能引发错误的代码段。

      针对以上几点,下面是一些可能的解决方案:

      1. 重启Python环境:尝试重新启动Python环境,有时候一个简单的重启可以清除Python环境的临时缓存和工作存储,使后续的Python脚本能够正常运行。此外,也可以尝试清理~/.local/share/PythonC:\Program Files (x86)\Python等Python工作目录下的临时文件和垃圾回收机制。

      2. 优化代码:查看Python代码中的代码逻辑,如果可能,尽量减少不必要的递归调用和嵌套循环,以降低因资源消耗而导致的进程阻塞。同时,确保代码的每一步都有明确的目的和目的,并尽可能减少不必要的计算和内存访问,减少IO操作。

      3. 优化资源分配:合理地调整Python进程的工作负载,确保其至少在一个核心执行器(CPU)上执行足够的任务。如果资源分配不均衡,可能会导致某个关键任务过载,引起进程阻塞。尝试使用Python的multiprocessing.Pool()类进行多线程或多进程的资源管理,通过批量作业而不是单个作业提高资源利用率。

      4. 清理资源释放:确保在使用完Python库后及时释放相关资源,如文件句柄、连接,防止资源泄漏引发的无限循环或其他错误。在Python文档中查阅每个库的资源管理指南,确保正确关闭相关的对象和资源。

      5. 尝试使用特定版本或工具包:对于某些特定功能受限的库(如Pandas),尝试安装最新版或使用相应的Python包,有时候使用新版本或包可能会提升程序性能或解决特定问题,从而避免原生库引起的代码异常。

      6. 查看Python版本和配置:确保你的Python版本是最新的,根据实际需求选择合适的版本,避免因旧版本导致的问题。同时,根据 PyCharm 的 Python 配置,查看是否选择了正确的调试器和日志级别,适当的调试选项可以提高对错误原因的定位。

      7. 单元测试:编写单元测试用于检查代码的各个部分,确保其正确地完成各自的功能,并能够在不影响主程序运行的情况下发现和修复潜在的编程问题。使用诸如 unittest 或者 pytest 库进行单元测试,可以提供详细的测试报告和可视化结果,帮助排查错误原因。

      8. 检查Python版本和依赖关系:确认Python版本与Python SDK(如requests、BeautifulSoup、os、matplotlib 等)之间的兼容性和稳定度。使用Python自带的版本检查工具(如 pip checkpip freeze)或第三方工具(如 pip list)查看软件包的版本号和依赖关系,确保与官方推荐版本一致。

      以上建议旨在通过逐步排查和调整代码实现程序在PyCharm环境下正确运行,解决出现'Process already ended'错误的问题。若仍无法解决问题,建议联系PyCharm开发者团队获取专业的技术支持和代码审查,以便更准确地确定问题所在并针对性地解决问题。如果你能提供具体代码片段,我们可以在以下几个示例中逐步分析和修正可能导致错误的部分:

      import os
      import threading
      import time
      import requests
      
      class WorkerThread(threading.Thread):
          def __init__(self, weibo_url, thread_id, thread_name, callback_function):
              super(WorkerThread, self).__init__()
              self.weibo_url = weibo_url
              self.thread_id = thread_id
              self.thread_name = thread_name
              self.callback_function = callback_function
      
          def run(self):
              while True:
                  sleep(60)  # wait for a minute before checking the status
                  response = requests.get(self.weibo_url)  # send request to get data
                  if response.status_code != 200:
                      print(f"Weibo URL '{self.weibo_url}' failed with status code {response.status_code}. Response content:")
                      break
                  try:
                      tweet_data = response.json()
                      timestamp = strtodatetime(tweet_data['timestamp'], '%H:%M')
                      today_date = datetime.now().strftime('%Y-%m-%d')  # extract date from timestamp
                      follower_count = tweet_data['followerCount']  # fetch number of followers
                      if follower_count > 3000:
                          print(f"Follower count exceeds {followers_max_num} and this is likely to cause problems.")
                          break
                  except ValueError:
                      print(f"The timestamp ({timestamp}) is invalid or does not contain any 'followerCount' key.")
                      break
      
                  # Call your callback function after fetching data
                  if callback_function:
                      callback_function(timestamp, current_user, follower_count)
      
          def stop(self):
              self.daemon = False
              super(WorkerThread, self).stop()
      
      if __name__ == '__main__':
          weibo_url = "https://api.weibo.com/2/statuses"
          thread_id = "my_thread_id"
          thread_name = "My Thread"
          callback_function = lambda timestamp, current_user, follower_count: f"{timestamp}, User: {current_user}, Follower Count: {follower_count}"
      
          wthread = WorkerThread(weibo_url, thread_id, thread_name, callback_function)
          wthread.start()
          wthread.join()
      

      在这个例子中,我们首先定义了一个WorkerThread类,实现了与微博API发送GET请求和回调函数的集成。在run方法中,通过异步编程方式发送HTTP请求并获取响应数据。如果请求失败,我们将捕获并打印错误信息。为了保证在多线程环境下并发运行,我们使用了threading.Thread继承自threading.Process类,并重写了startjoin方法。

      stop方法中,我们设置daemon属性为False,以便于主线程退出时释放未运行的线程。然后,调用父类stop方法并挂起,最后调用子类stop方法销毁已经启动的子线程。

      注意,上述示例中没有进行错误处理和调试,实际应用中在实际编写中应包含必要的错误处理代码,如异常处理、日志记录等,以便在出现问题时能够得到准确的错误信息和定位出错代码。同时,使用条件变量、锁等同步控制机制来保护其他部分不会因为自身线程的退出而阻塞,确保Python进程在正确退出。

      展开全部

      评论 编辑记录
    • 阿里嘎多学长 2024-03-30 10:30
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      如果PyCharm运行Python脚本没有输出结果,且终端只显示“进程已结束,退出代码0”,这通常意味着脚本已经正常执行完毕,没有抛出任何错误,并且没有打印任何内容到标准输出(stdout)。在给定的代码中,没有包含任何print()语句来显示中间或最终结果,所以如果没有错误,脚本会默默地完成其文件复制和分类任务。

      为了调试这个问题,你可以尝试以下几个步骤:

      1. 添加打印语句:在代码的关键位置添加print()语句,以检查代码的执行流程。例如,在计算变量或进行条件判断的地方添加,看看是否达到了预期的逻辑。

      2. 查看错误输出:如果你的脚本在运行过程中产生了错误,这些错误通常会出现在PyCharm的底部终端窗口。检查是否有任何错误或警告信息。

      3. 检查文件系统:脚本涉及到文件操作,如复制文件到不同的目录。手动检查C\熬夜生活满意度\stay up\C:\ Administrator\Desktop\9-1\熬夜生活满意度\no stay up\目录,看是否有新的文件被创建或移动。

      4. 使用调试模式:在PyCharm中,你可以使用调试器逐步执行代码,观察每一步的变量状态。这可以帮助你发现代码是否按预期执行。

      5. 确保输入文件存在:确认C:\Administrator\Desktop\9-1\熬夜生活满意度\weiboSpider-master\weibo\目录下有CSV文件,因为脚本是基于这些文件运行的。

      6. 检查路径:确保所有涉及的路径都是正确的,包括源文件路径和目标文件路径。路径中的特殊字符或者中文路径可能会引起问题,特别是如果操作系统不支持的话。

      7. Python版本兼容性:确保你的Python版本与使用的库和脚本代码兼容。

      如果以上步骤都没有发现问题,可能需要更详细地检查代码逻辑,确保它在处理数据和进行决策时没有忽略任何关键步骤。如果你能提供具体的错误信息或者更多的上下文,我可以给出更针对性的建议。

      评论
    • CSDN-Ada助手 CSDN-AI 官方账号 2024-03-30 12:04
      关注

      【相关推荐】




      如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    cvxpy: Python优化库
    RIP动态路由配置
    栈的基本操作
    HTTP协议详解-下(Tomcat)
    前端TypeScript学习day02-TS常用类型
    Python 通过selniumwire调用企查查原生接口抓取企查查公开企业信息全过程——以抓取成都500万家企业为例
    老卫带你学---leetcode刷题(96. 不同的二叉搜索树)
    Abbkine IFKine驴抗小鼠IgG二抗,绿色荧光标记方案
    vant 按需导入 vue2
    Action模型 -- 增强型UML建模和后台代码的自动生成工具
  • 原文地址:https://ask.csdn.net/questions/8081297