如何使用python枚举一些文本文件?

时间:2019-05-20 03:11:42

标签: python enumerate

我想制作一个使用Openpyxl自动执行excel任务的程序。我正在使用“枚举”打开一些文本文件,然后自动输入到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 :(得分:0)

重新定位某些语句,并确保语句在适当的循环中(正确的缩进)。我没有测试过,但看起来正确。

首先在开始时进行所有导入和设置。

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')

最好open a file using the with keyword,以确保文件已关闭。

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

在您的示例中,您使用枚举遍历文件中的每个字符,以找到数据的开始和结束的索引text[idx:idx+4] == 'NPWP'

字符串有一个find method,它将为您做到这一点。

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')