如何使用python枚举一些文本文件?
我想制作一个程序,使用Openpyxl自动化excel任务。我使用“枚举”打开一些文本文件,然后自动输入excel文件如何使用python枚举一些文本文件?,python,enumerate,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('â
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个文本文件输入excel。如何编写代码以打开多个文本文件?重新定位一些语句,并确保语句位于适当的循环中(正确的缩进)。我没有测试过这个,但它看起来是正确的 首先,在开始时导入和设置所有内容
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 open(filename, 'r') as f:
text = f.read().replace('\u2014', '-').replace('—', '-')
在您的示例中,您使用enumerate对文件中的每个字符进行迭代,以查找数据开始和结束的索引,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')
为什么需要在此处枚举
<代码>对于文件名中的文件名
效果很好。因为它包含错误“ValueError:太多的值无法解包(预期为2)”Hi@jodayme,我建议启动一个单独的脚本,只需对文件执行正确的迭代即可。尝试只打印两个文件的名称,而不使用enumerate<代码>文件名中的f:打印f。一旦您看到这项工作,您就可以构建程序的其余功能。您在下面的代码中所说的ValueError
是不可能的。正如Adam所建议的,您应该首先检查文件名中的对象对于idx,enumerate(文本)中的字母:
在其套件中没有任何内容。上的data=text[start:end]
中的行看起来不像是在外部循环的套件中。您可能希望开始使用四个空格来进行缩进,这使得缩进更容易查看,而且大多数Python程序员都使用这种约定。