首页 > 解决方案 > jython max() 'int' 对象不可迭代

问题描述

我寻求帮助。我设法使用以下代码将 row_id 添加到我的文件中,并且工作正常。

infile = open(inputfile, 'r')
outfile = open(outputfile, 'w')

for i, line in enumerate(infile): 
#write header
    row_sec = ("00000" + str(i))[-5:]
    row_nr = max(row_sec)
    outfile.write(row_sec + "Company" + column[0] + column[1] + row_nr + "\n")
outfile.close()
infile.close()

结果:

问题是我需要将 nr 个记录放在标题行中(在这种情况下它将是 00037)

当我使用

records = max(i) 

或者

records = max(row_id) 

我收到错误 TypeError: 'int' object is not iterable

我阅读了这个错误并理解了它,但仍然无法弄清楚如何摆脱它。有没有一种聪明而简单的方法来修复我的代码?

标签: pythonjython

解决方案


您可以延迟写入并从循环中获取变量:

buffer = []
for i, line in enumerate(infile): 
    # create line content
    buffer.append('%5d' % i + " Company " + line + "\n")
# i is still set to the last value
# write header
outfile.write('%5d' % i + " Elements\n")
for line in buffer:
    outfield.write(line)

这将写出类似

00037 Elements
00000 Company ACME
00001 Company EMCA
...
00037 Company MECA

请注意,如果您需要设置第一个索引,enumerate则需要一个可选参数。start


如果您的文件大于可用内存,则可以读取两次而不是缓冲:

# read once to get number of entries
with open(inputfile, 'r') as infile:
    companies = sum(1 for line in infile)

infile = open(inputfile, 'r')
outfile = open(outputfile, 'w')

# write header
outfile.write('%5d' % companies + " Elements\n")
for i, line in enumerate(infile):
    row_sec = ("00000" + str(i))[-5:]

推荐阅读