python - 来自 memory_profiler 的 @profile 装饰器正在改变代码的行为,特别是 pandas 函数
问题描述
我正在使用库memory_profiler来运行一些内存分析,它似乎工作正常,除非我在一个正在读取文件@profile
的函数上使用装饰器。该函数在没有装饰器的情况下工作,但无法使用装饰器读取 csv 文件。csv
pandas
重现错误的最少代码如下,它需要在.py
文件中才能使库正常工作。它将创建一个带有导致失败的文本字符串的小 csv 文件(仅当@profile
存在时,否则正确读取)。预期的行为是使用第一个函数调用(无分析)将 csv 打印为 DataFrame,但在第二个函数调用(相同的函数,但分析)时失败。
行为变化是否有解释?
#!/usr/bin/env python
#
import pandas as pd
from memory_profiler import profile
file_path = 'test.csv'
with open(file_path, 'w') as file:
file.write('col_1;"weird_col(=CONCATENATE("" "",G2,"": str = \'"",A2,""\'""))"\n')
file.write('"bla.""default"",";\n')
def func1(file_path):
df = pd.read_csv(file_path, sep=';')
return df
@profile
def func2(file_path):
df = pd.read_csv(file_path, sep=';')
return df
print('No profile:')
df = func1(file_path)
print(df)
print('Worked fine!\n')
print('WITH profile:')
df2 = func2(file_path)
print(df2)
解决方案
推荐阅读
- flutter - 如何在文本小部件中添加文本字段?- 颤振
- javascript - ./src/Firebase.js 模块未找到:无法解析“C:\Users\HP\Desktop\React\clone\disney-plus-clone\src”中的“firebase”
- r - 如何在 ggboxplot() 中添加紧凑型字母显示?
- react-native - React-Native 工具提示问题
- python - 如何根据用户的意愿关闭多个 selenium 会话?
- javascript - TS2339:类型“{}”上不存在属性“id”
- react-native - React Native : 想从应用运行一个函数,如果应用处于后台或前台状态,它不会停止
- postgresql - symfony - 配置 postgres 实体管理器
- php - Laravel 加载的关系,动态调用将不允许在 Blade 中调用 ->count(),除非在 @dd() 中调用?
- python - 绘制从一个点经过的多条线