python - 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()
结果:
- 00000 - 标题
- 00001 - 数据
- 00002 - 数据
- .... - 数据
- 00037 - 数据最后一行
问题是我需要将 nr 个记录放在标题行中(在这种情况下它将是 00037)
当我使用
records = max(i)
或者
records = max(row_id)
我收到错误 TypeError: 'int' object is not iterable
我阅读了这个错误并理解了它,但仍然无法弄清楚如何摆脱它。有没有一种聪明而简单的方法来修复我的代码?
解决方案
您可以延迟写入并从循环中获取变量:
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:]
推荐阅读
- coldfusion - 我应该在 onApplicationStart() 函数内部还是外部放置 DSN(数据源)定义?
- firefox - 无法在文本区域上下移动光标(Firefox 77.0.1(64 位)、Windows)
- html - 带溢出的弹性容器
- javascript - html 表单中的 JavaScript 验证
- python - Pandas groupby 结果 - 将一些分组的列值移动到新数据框的行中
- google-sheets - 用另一个单元格谷歌表中的值填充空单元格
- tensorflow - TensorFlow 在训练 resnet 时如何处理 Tfrecord 格式的 ImageNet 图像?
- oracle - ORACLE 递归查询
- react-native - 反应原生导航注册页面
- c# - Random.Next() 可以返回 int.MaxValue 吗?