Python 从所选excel工作表打印图形

Python 从所选excel工作表打印图形,python,csv,matplotlib,Python,Csv,Matplotlib,文件夹中有许多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 fo

文件夹中有许多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文件,以便我可以选择所需内容):

因此,我选择了相应的代码,如1、2或3进行绘图。这就是我得到的错误

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

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

您的
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\u code
转换为字符串。首先,
input()
将返回一个字符串,因此无需执行
str(int(input())
,其次,您需要将其作为列表索引。因此,请删除
str
cast,并像以前一样将其保留在
int(input())

您能更好地解释一下您想要实现的目标吗?也许可以告诉我们您现在得到了什么?当前,当我在输出中运行程序时,输出中仅显示1个csv表。但我希望文件夹中的所有csv表都显示在输出中,如上所述。当我运行修改后的代码时,它正确显示该文件夹中的所有文件,但当我选择相应的num以绘制其不打印打印并检查
csv\u路径
是否根据您的选择分配了正确的值。至于打印错误,请使用新日志更新您的问题。我将检查itcsv\u path=path+“\\”+文件夹\u数据[csv\u代码]类型错误:列表索引必须是整数或切片,而不是更新我的答案。请避免使用这个问题来解决代码中的所有问题。如果你有任何新问题,问一个新问题。既然您原来的问题已经解决,您可以将此答案标记为已接受。
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])