Python 如何使用多进程/多线程读取csv文件并将其存储在生成的新变量中? 我有一个文件名列表,并使用它生成字符串,该字符串将成为存储dataframe的新变量 下面的代码无效 def文件名(名称): filename=f'{name}.csv' 返回pd.read_csv(文件名(name)) 以concurrent.futures.ProcessPoolExecutor()作为执行器: 文件=[ '20190702', '20190703', '20190708', ] #将成为新变量名的Sting列表 name_list=['df_'+i.split('2019')[1]表示文件中的i] #用于存储新变量的列表 执行人名单=[] 对于范围内的i(len(文件)): 名称=名称\u列表[i] dataframe=executor.submit(文件名,文件[i]) exec(f“{name}={dataframe}”)#这里有一些错误! exec(f“executor_list.append({name})”) 对于遗嘱执行人名单中的i: exec(f“{i}={i.result()}”)

Python 如何使用多进程/多线程读取csv文件并将其存储在生成的新变量中? 我有一个文件名列表,并使用它生成字符串,该字符串将成为存储dataframe的新变量 下面的代码无效 def文件名(名称): filename=f'{name}.csv' 返回pd.read_csv(文件名(name)) 以concurrent.futures.ProcessPoolExecutor()作为执行器: 文件=[ '20190702', '20190703', '20190708', ] #将成为新变量名的Sting列表 name_list=['df_'+i.split('2019')[1]表示文件中的i] #用于存储新变量的列表 执行人名单=[] 对于范围内的i(len(文件)): 名称=名称\u列表[i] dataframe=executor.submit(文件名,文件[i]) exec(f“{name}={dataframe}”)#这里有一些错误! exec(f“executor_list.append({name})”) 对于遗嘱执行人名单中的i: exec(f“{i}={i.result()}”),python,pandas,multithreading,multiprocessing,concurrent.futures,Python,Pandas,Multithreading,Multiprocessing,Concurrent.futures,我在colab中运行了这个,我得到了这个错误: File "<string>", line 1 df_0702 = <Future at 0x7f0e5b8cc3c8 state=running> ^ SyntaxError: invalid syntax 文件“”,第1行 df_0702= ^ SyntaxError:无效语法 执行者。提交返回未来对象。因此,您应该从future对象检索结果 files=['20190702',

我在colab中运行了这个,我得到了这个错误:

  File "<string>", line 1
    df_0702 = <Future at 0x7f0e5b8cc3c8 state=running>
              ^
SyntaxError: invalid syntax
文件“”,第1行
df_0702=
^
SyntaxError:无效语法

执行者。提交
返回
未来
对象。因此,您应该从future对象检索结果

files=['20190702','20190703','20190708']
期货={}
以concurrent.futures.ProcessPoolExecutor()作为执行器:
对于文件中的文件名:
vname='df_u'+filename.split('2019')[1]
filename=filename+'.csv'
future=executor.submit(pd.read\u csv,文件名)
期货[vname]=期货
对于vname,futures.items()中的f:
dataframe=f.result()
#对vname和dataframe执行一些操作

另外,除调试/测试外,切勿使用
exec
eval
功能。它们使您的代码不安全,难以调试。

您不需要使用ProcessPoolExecutor,因为您的操作是I/O绑定的。生成线程比进程便宜。因此,您可以使用ThreadPoolExecutor

def filename(name):
    filename = f'{name}.csv'
    return filename, pd.read_csv(filename(name))

files = ['20190702', '20190703', '20190708']

futures = []

with concurrent.futures.ThreadPoolExecutor() as executor:
    for i, filename in enumerate(files):
        vname = 'df_' + filename.split('2019')[1]
        filename = filename + '.csv'
        futures.append(executor.submit(pd.read_csv, filename))

results = [f.result() for f in futures]