Создание цикла для чтения файлов Excel — python

#python #excel #pandas #for-loop #import-from-excel

#python #excel #панды #для цикла #импорт из Excel

Вопрос:

Я пытаюсь создать цикл, который будет считывать каждый файл Excel и выполнять вычисления над ними.

Что у меня есть, так это:

 n=150
for i in range(n):
   dw = pd.read_excel(str(i)   '.xlsx')
   print(dw)
  

(После этого я выполняю вычисления над ними — я просто распечатал результат, чтобы проверить, правильно ли он импортировал файлы)

Однако, когда я запускаю это, запускается последний файл Excel (файл с именем 150.xlsx ) 150 раз. (Вместо каждого из файлов по одному разу.)

Есть ли способ обойти это?

Комментарии:

1. Вы не сможете добраться до 150? Он будет выполняться от 0 до 149. Попытка изменить n на 151

2. приведенный выше код должен работать. print (i) для подтверждения значений итерации. вы могли бы добавить dw = pd.read_excel(str(n) '.xlsx') правильную проверку запущенного кода.

3. Спасибо! Я проверил, и он все еще не работает должным образом. В PyCharm тоже — любая другая возможная причина для этого, которую вы, возможно, знаете?

Ответ №1:

Как уже говорил Мохамед, ваш код должен работать нормально, возможно, вы случайно написали pd.read_excel(str(n) '.xlsx') вместо этого.

Кроме того, вы можете использовать os.walk для перечисления всех файлов в каталоге и вместо этого использовать имена файлов:

 import os

path = '<your path to excel files>'

files = []

# getting all files in directory
for (dirpath, dirnames, filenames) in os.walk(path):
    files.extend(filenames)

# opening every .xlsx file and performing calculations
for f in files:
    if f.endswith('.xlsx'):
        dw = pd.read_excel(os.path.join(path, f))
        # your calculation here      
  

Комментарии:

1. Спасибо! Характер моих вычислений делает функцию read_excel более подходящей (вычисления требуют, чтобы я ссылался на предыдущие вычисления на основе того же имени индекса папки ie. ‘i’.) Хм, мне кажется странным, что и вы, и Мохаммед говорите, что это должно работать, но это не так — как на pycharm, так и на python. Может ли быть другое объяснение этому?

2. Я отредактировал свой ответ, чтобы использовать read_excel() функцию сейчас, надеюсь, это поможет. Что касается другой проблемы, я попробовал ее локально, и у меня не было проблем. Я создал 4 файла xlsx с именами 1.xlsx to 4.xlsx , каждый из которых содержит «Это <число>» в качестве данных и использовал именно ваш код без каких-либо ошибок. Этому есть несколько объяснений, возможно, ваши данные случайно совпадают, может быть, что-то еще. Но приведенный вами сокращенный код на 100% верен. Если вы можете поделиться фактическим сценарием, над которым вы работаете, возможно, я смогу помочь немного больше.