从所选excel sh打印图形

2024-04-20 04:46:40 发布

您现在位置:Python中文网/ 问答频道 /正文

文件夹中有许多csv excel工作表。所有excel工作表只包含前3列中的数据。我会从大量的csv表中选择相应的csv表,然后打印出来

import os
path = "F:\\Users\\Desktop\\Data\\Summary"
files = []
folder_data = os.listdir(path)
folder_data = [i+"\\" for i in folder_data]

# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        if '.csv' in file:
            files.append(file)
for i, f in enumerate(files):
    print(( i,f))
    print('\n'.join(f'{i}-{v}' for i,v in enumerate(files)))
    csv_code = str(int(input("Enter corresponding code to plot: ")))
    csv_path = path + "\\" + folder_data[csv_code] 

    df = pd.read_csv(csv_path, header=None)
    df1 = df.iloc[:,0:2]
    plt.plot(df1[0], df1[1])

当前,当我运行代码时只显示1个csv表,因此当我运行代码时,我希望输出显示如下(我的意思是我希望显示文件夹中的所有csv文件,以便我可以选择我想要的):

0-Test_Summary_1.csv
1-Test_Summary_2.csv
2-Test_Summary_3.csv
3-Test_Summary_4.csv
4-Test_Summary_5.csv
5-Test_Summary_6.csv etc

所以我选择了相应的代码,比如1,2,3来绘图,这就是我得到的错误

    csv_path = path + "\\" + folder_data[csv_code]

TypeError: list indices must be integers or slices, not str

Tags: csvpath代码intest文件夹fordata
1条回答
网友
1楼 · 发布于 2024-04-20 04:46:40

你的input调用不应该在for循环中,因为你想先打印出所有的项目。您可以按以下方式修复它:

print('\n'.join(f'{i}-{v}' for i,v in enumerate(files))) # a shorter version of the loop

csv_code = int(input("Enter corresponding code to plot: "))
csv_path = os.path.join(path, files[csv_code])

df = pd.read_csv(csv_path, header=None)
df1 = df[0:2]
df1 = df.iloc[:,0:2]
plt.plot(df1[0], df1[1])

更新

在新代码中,出于某种原因将csv_code强制转换为字符串。首先,input()将返回一个字符串,因此不需要执行str(int(input())),其次,您要求它是一个列表索引。所以移除str强制转换,并像以前一样将其保留在int(input())

相关问题 更多 >