Python 读取多个csv文件时出现未知语法错误

Python 读取多个csv文件时出现未知语法错误,python,pandas,csv,format,exec,Python,Pandas,Csv,Format,Exec,我正在尝试使用以下代码从多个子文件夹中读取一组csv文件: for csv in glob.glob('./data/*/*.csv', recursive=True): # all csv files in ./data vname = 'data_' + csv.split('/')[3].split('.')[0].lower() # variable names created from lowercased filenames print(csv, '-->',

我正在尝试使用以下代码从多个子文件夹中读取一组csv文件:

for csv in glob.glob('./data/*/*.csv', recursive=True): # all csv files in ./data
    vname = 'data_' + csv.split('/')[3].split('.')[0].lower() # variable names created from lowercased filenames
    print(csv, '-->', vname) # test print csv-path and variable (for debugging)
    exec("{0} = {1}".format(vname, pd.read_csv(csv, encoding='latin1'))) # initialize data from csvs to varaible names
我曾尝试在单独的行中读取csv,并使用tmp变量作为
格式
的参数,但没有成功。 读取csv文件本身起作用,并分配一个整数
exec(“{0}={1}”。format(vname,2))
也起作用。我无法理解为什么我总是得到以下语法错误:

Traceback (most recent call last):

  File "/home/seb/.anaconda3/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3326, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)

  File "<ipython-input-173-4c89ac367e67>", line 4, in <module>
    exec("{0} = {1}".format(vname, pd.read_csv(csv, encoding='latin1'))) # initialize data from csvs to varaible names

  File "<string>", line 1
    data_sharks_rays_chimaeras =           id_no                 binomial presence origin seasonal  \
                                                                        ^
SyntaxError: invalid syntax
回溯(最近一次呼叫最后一次):
文件“/home/seb/.anaconda3/lib/python3.7/site packages/IPython/core/interactiveshell.py”,第3326行,运行代码
exec(代码对象、self.user\u全局、self.user\n)
文件“”,第4行,在
exec(“{0}={1}”.format(vname,pd.read_csv(csv,encoding='latin1'))#将csv中的数据初始化为可变名称
文件“”,第1行
数据\u鲨鱼\u鳐鱼\u嵌合体=id\u无二项分布来源季节性\
^
SyntaxError:无效语法

问题在于,您试图将
pd.read\u csv
的结果用作字符串格式参数。这行不通

你可以试试:

exec(“{0}=pd.read_csv({1},encoding='latin1'))”。格式(vname,csv)
但是,不建议对此类任务使用
exec
(有关一些线索,请参阅)。你可以用字典来代替:

data={}
对于glob.glob('./data/*/*.csv',recursive=True)中的csv:
vname='data_u'+csv.split('/')[3]。split('.')[0]。lower()
数据[vname]=pd.read\u csv(csv,encoding='latin1'))