Как перечислить некоторые текстовые файлы, используя python? - PullRequest
2 голосов
/ 20 мая 2019

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

import os
os.chdir(r'F:\tes')

filenames = ["eb.txt", "ea.txt"]

for i, filename in enumerate(filenames):

  file = open(filename, 'r')
  text = file.read().replace('\u2014', '-').replace('—', '-')

  start = 0 
  startcheck = True
  end = 0
  endcheck = True

  for idx, letter in enumerate(text):

  if text[idx:idx+4] == 'NPWP' and startcheck:
    start = idx + 7
    startcheck = False

  if text[idx:idx+7] == 'Pembeli' and endcheck:
    end = idx
    endcheck = False

 data = text[start:end]

 from openpyxl import load_workbook
 wb = load_workbook(filename = r'F:\tes\Book1.xlsx')
 sheet_ranges = wb['1771 III']
 cell_name = 'M' + str(20 + (3*i))
 sheet_ranges[cell_name] = data
 wb.save(filename = r'F:\tes\Form 1771.xlsx')

Я пытался открыть 2 текстовых файла, но он только открывает и вводит 1 текстовый файл, чтобы преуспеть. Как мне написать код, чтобы открыть несколько текстовых файлов?

1 Ответ

0 голосов
/ 20 мая 2019

Переместите некоторые операторы и убедитесь, что операторы в соответствуют соответствующим циклам (правильный отступ).Я не проверял это, но это выглядит правильно.

Сначала все импорт и настройка в начале.

import os
from openpyxl import load_workbook

os.chdir(r'F:\tes')
filenames = ["eb.txt", "ea.txt"]
wb = load_workbook(filename = r'F:\tes\Book1.xlsx')

Затем запустите итерацию.

# outer loop
for i, filename in enumerate(filenames):

    file = open(filename, 'r')
    text = file.read().replace('\u2014', '-').replace('—', '-')
    # explicitly close the file
    file.close()

    start = 0 
    startcheck = True
    end = 0
    endcheck = True

    # find the data
    # inner loop
    for idx, letter in enumerate(text):

        if text[idx:idx+4] == 'NPWP' and startcheck:
            start = idx + 7
            startcheck = False

        if text[idx:idx+7] == 'Pembeli' and endcheck:
            end = idx
            endcheck = False

    # ensure this section in the outer loop
    data = text[start:end]
    sheet_ranges = wb['1771 III']
    cell_name = 'M' + str(20 + (3*i))
    sheet_ranges[cell_name] = data

Наконец сохранитеРабочая тетрадь.Отступ гарантирует, что он будет сохранен после того, как все данные будут записаны в него.

wb.save(filename = r'F:\tes\Form 1771.xlsx')

Вероятно, лучше всего открыть файл, используя ключевое слово with , которое обеспечитфайл закрыт.

with open(filename, 'r') as f:
    text = f.read().replace('\u2014', '-').replace('—', '-')

В вашем примере вы перебираете каждый символ в файле, используя перечисление, чтобы найти индекс начала и конца ваших данных, text[idx:idx+4] == 'NPWP'.

В строках есть метод поиска , который сделает это за вас.

start = text.find('NPWP')
end = text.find('Pembeli', start)
data = text[start:end]

С этими изменениями ваш код будет выглядеть так:

import os
from openpyxl import load_workbook

os.chdir(r'F:\tes')
filenames = ["eb.txt", "ea.txt"]

wb = load_workbook(filename = r'F:\tes\Book1.xlsx')

for i, filename in enumerate(filenames):

    with open(filename, 'r') as f:
        text = f.read().replace('\u2014', '-').replace('—', '-')

    start = text.find('NPWP')
    end = text.find('Pembeli', start)

    data = text[start:end]
    sheet_ranges = wb['1771 III']
    cell_name = 'M' + str(20 + (3*i))
    sheet_ranges[cell_name] = data

wb.save(filename = r'F:\tes\Form 1771.xlsx')
...