我有两个项目列表,一个是文本,另一个是数字。我想将它们打印在一起,就像这样
a 1
b 2
c 3
等等。但这是我的一段代码:
f = open("file1","r+")
VALORINUMAR=f.readlines()
g=open("test.txt",'r+')
VALORITEXT=g.readlines()
a,k=0
for a,k in range(0,50):
print(VALORITEXT[a],VALORITEXT[k])
我在
中收到此错误<module>
a,k=0
TypeError: 'int' object is not iterable
答案 0 :(得分:1)
如果liniute[k]
提出TypeError: list indices must be integers, not _io.TextIOWrapper
,则表示k
是文件对象,而不是整数。
您发布的代码实际上并没有这样做。如果你的真实代码有,你几乎肯定会做两件事之一:
for k in range (0,50):
print(liniute[g]) # oops, g instead of k
for k in range (0,50):
# long complicated body that does lots of stuff...
k = open("otherfile") # oops, reused k to mean two things
# ...
print(liniute[k])
使用有意义的变量名而不是随机的单字母名称会使这样的错误更难创建,并且更容易调试。
同时,这段代码:
for a, k in range (0,50):
print(lines[a],liniute[k])
...确实有两个错误,但仍然不是您发布的错误。
首先,有一个显而易见的IndentationError
。
其次,range(0, 50)
遍历整数,而不是整数对,因此您无法将每个整数分配给a, k
。这就像写a, k = 1
。
但你真的不需要两个单独的变量。只需使用相同的变量两次:
for a in range(0, 50):
print(lines[a], liniute[a])
答案 1 :(得分:1)
您似乎正在尝试做的只是配对文件。如果是这种情况,发电机会派上用场。
def text_generator():
with open('secondfile.txt', 'r+') as f:
for line in f:
yield line.rstrip('\n')
with open('firstfile.txt', 'r+') as f:
generator = text_generator()
for fline in f:
print(fline.rstrip('\n'), next(generator))
需要额外注意换行:两个文件最有可能包含它们,而隐式打印也会添加一个。因此,我们必须剥离它们以获得良好的输出。
答案 2 :(得分:1)
zip
会很有用。
f = open("file1", "r")
g = open("test.txt", "r")
for fline, gline in zip(f, g):
print(fline.strip(), gline.strip())
(帽子提示mpolednik,因为这只是他想法的简化。)