首页 > 编程语言 >Python加速运算——"-O优化"和Cython

Python加速运算——"-O优化"和Cython

时间:2024-10-20 13:33:04浏览次数:6  
标签:Cython 运算 index Python chunk replace file data row

1. 以 release模式运行Python

python -O process_file.py

可以在代码中加入以下命令,判断是否为release模式:

if __debug__:
    print("Debug mode")
else:
    print("Release mode")

2.使用Cython

下载Cython:

pip install cython

编写pyx文件,即要编译的Python代码:

为了后面方便调用,你可以把需要运行的函数放到一个函数中,例如我放到了main()函数中

# process_file.pyx

# python -O process_file.py
import pandas as pd
from tqdm import tqdm

def clean_str(input:str)->str:
    # u"\u3000": 全角空格
    # u"\xa0": #nbsp
    # output = input.strip()\
    #                   .replace('"', '')\
    #                   .replace(u"\u3000", "")\
    #                   .replace(u"\xa0", "")\
    #                   .replace("【", "")\
    #                   .replace("】", "")\
    #                   .replace(" ", "")
    output = input.strip()\
                      .replace(u"\u3000", " ")\
                      .replace(u"\xa0", " ")\
                      .replace("【", "[")\
                      .replace("】", "]")
    return output

def main():

  file_in = "ownthink_v2\ownthink_v2.csv"
  file_out = "ownthink_v2\ownthink_v2_cleaned.csv"
  file_out_2 = "ownthink_v2\ownthink_v2_cleaned_rfiltered.csv"

  chunk_size = 10000


  # 逐块读取CSV文件  
  data_all = pd.read_csv(file_in, chunksize=chunk_size)# 139951300


  # 进行数据清洗
  lc = 0  # 计数
  head_flag = True

  for data_chunk in tqdm(data_all, total=13996):
    # 删除含有 NAN 的行 和 空行 
    data_chunk = data_chunk.dropna()
    # column_names_list = data_chunk.columns.tolist()
    for index, row in data_chunk.iterrows():
      # 实体,属性,值
      entity = row["实体"]
      attribution = row["属性"]
      value = row["值"]

      if entity == value:
        # 过滤掉 实体 和 值 相等的情况(比如 “英雄联盟 中文名 英雄联盟”)
        data_chunk = data_chunk.drop(index=index, axis="rows")
        continue
    
      # line =  entity + attribution + value 
      # if "歧义关系" in line or "歧义权重" in line:
      #   data_chunk = data_chunk.drop(index=index, axis="rows")
      #   print(line)
      #   continue

      # 进行清理,并赋值给 data_chunk
      row["实体"] = clean_str(entity)
      row["属性"] = clean_str(attribution)
      row["值"] = clean_str(value)

      lc += 1

    # 写入文件
    # mode = 'a'为追加数据,index为每行的索引序号,header为标题
    if head_flag:
      data_chunk.to_csv(file_out, mode='w', index=False, header=True, encoding="utf-8")
      head_flag = False
    else:
      data_chunk.to_csv(file_out, mode='a', index=False, header=False, encoding="utf-8")

    # if lc > 10000:
    #   break

  print(lc)

编写setup.py文件,使得 Cython 可以将我们的 Python 代码编译成 C 代码:

# setup.py
from setuptools import setup
from Cython.Build import cythonize


setup(
    ext_modules = cythonize('process_file.pyx')
)

接着,运行命令:

python setup.py build_ext --inplace

这样会生成build文件夹,.cpp文件,.pyd文件,其中,build文件夹.pyd文件是对你有用的;

你可以在Python代码中调用编译好的cython文件:

from process_file import main

main()

标签:Cython,运算,index,Python,chunk,replace,file,data,row
From: https://www.cnblogs.com/RakanLiu/p/18487177

相关文章

  • 基于Python的旅游网站数据爬虫分析-可视化大屏
    《[含文档+PPT+源码等]精品基于Python的旅游网站数据爬虫分析》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!软件开发环境及开发工具:开发语言:python使用框架:Django前......
  • python+flask计算机毕业设计影视信息资源交易平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,影视产业迎来了前所未有的繁荣期。然而,影视信息资源的分布不均、交易渠道不畅等问题日益凸显,限制了影视作品的传......
  • 面向对象 加法运算符重载
    ////Createdby徐昌真on2024/10/18.//#include<iostream>usingnamespacestd;//定义一个复数类classComplex{public:Complex():real(0),image(0){}Complex(intreal,intimage){//这是一个传参构造函数用于传入成员变量的值this-......
  • 洛谷P3741 小果的键盘(Python)
    海阔凭鱼跃,天高任鸟飞。——宋·阮阅《诗话总龟前集》一、题目传送门https://www.luogu.com.cn/problem/P3741二、代码input()s=list(input().strip())ans="".join(s).count("VK")foriinrange(len(s)):ifs[i]=='V':s[i]='K'......
  • python脚本+kaili检测笑脸漏洞
    一、笑脸漏洞简介:        笑脸漏洞(Smile vulnerability)是指在计算机系统或网络中,由于某些设计或实现缺陷而导致的安全漏洞。该漏洞的名称源于其影响的用户界面或体验往往看起来友好和无害,但实际上可能会导致严重的安全问题。笑脸漏洞可以在多种应用和系统中存在,尤其......
  • 洛谷P5731 【深基5.习6】蛇形方阵(Python)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档前言尝试一种没写过的解法。一、题目传送门https://www.luogu.com.cn/problem/P5731二、代码deffuc(i,j,cur,sign):#位置为(i,j),写下cur,方向为signglobaln,ansifcur>n*n:retur......
  • (附源码)基于python的旅游大数据系统的设计与实现-计算机毕设 26553
    基于python的旅游大数据系统的设计与实现目 录1绪论1.1选题背景和意义1.2国内外研究现状1.3论文结构与章节安排1.4开发技术1.4.1MVVM模式介绍1.4.2Django框架1.4.3Vue.js主要功能2 系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 操作可......
  • 使用Python爬取某车网参数详情并解析数据
    前言在本文中,我们将介绍如何使用Python来获取某汽车网站的参数详情,并将有用的数据提取出来保存到本地。我们将使用requests库来发送网络请求,同时利用随机User-Agent和代理IP来模拟真实用户的访问行为,以避免被服务器封禁。目标网站1.准备工作首先,我们需要安装一些必要......
  • [Python手撕]游戏中弱角色的数量
    你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击和防御。给你一个二维整数数组properties,其中properties[i]=[attacki,defensei]表示游戏中第i个角色的属性。如果存在一个其他角色的攻击和防御等级都严格高于该角色的攻击和防御等级,则认为该角色为弱角色......
  • 【Python入门】5大Python预备知识全解:你真的懂Python吗?
    ......