文件夹中有很多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
答案 0 :(得分:1)
您的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())
上。