График графика из выбранного листа Excel - PullRequest
0 голосов
/ 28 мая 2019

В папке много листов 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

1 Ответ

1 голос
/ 28 мая 2019

Ваш 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()), как и раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...