首页 新闻 会员 周边 捐助

遍历多个文件不打印内容?

0
[已解决问题] 解决于 2025-08-25 16:49

with open('a.file') as f1, open('b.file') as f2:
for pair in f1, f2:
print(pair)
报<io.TextIOWrapper name='a.file' mode='r' encoding='utf-8'>
<io.TextIOWrapper name='b.file' mode='r' encoding='utf-8'>
这是什么东西,我以为会每次循环交叉打印f1,f2每一行呢

问题补充:
with open('a.file') as f1:
    for pair in f1:
        print(pair)
那为什么写一个文件就不是元组了呢?(f1)不行吗
_java_python的主页 _java_python | 小虾三级 | 园豆:984
提问于:2025-08-25 16:25
< >
分享
最佳答案
0

这段代码的输出是:

text
<io.TextIOWrapper name='a.file' mode='r' encoding='utf-8'>
<io.TextIOWrapper name='b.file' mode='r' encoding='utf-8'>
这是因为:

f1, f2 创建了一个包含两个文件对象的元组

循环遍历这个元组,每次迭代获取一个文件对象

print(pair) 打印文件对象本身,而不是文件内容

for pair in f1, f2:,这里 f1, f2 创建了一个元组,然后循环迭代这个元组,所以会依次得到f1和f2两个文件对象。
但是,当你写 for pair in f1: 时,情况就不同了。这里,f1 是一个文件对象,而文件对象是可迭代的,迭代文件对象会逐行返回文件中的行。
所以,关键区别在于:

  • for pair in f1, f2: 中的 f1, f2 是一个元组,所以循环两次,第一次是f1,第二次是f2(两个文件对象)
  • for pair in f1: 中的 f1 是一个文件对象,循环的是文件中的每一行

for pair in f1: - 迭代文件对象本身(逐行)
for pair in (f1, f2): - 迭代包含文件对象的元组
for pair in f1, f2: - 这是上面第二种写法的简写,Python 会自动创建元组

主要原因是(1)不是元组是int类型,(1,)加个逗号才是元组
同样(f1)是文件对象类型(<class '_io.TextIOWrapper'>)
而(f1,)是元组
所以想要看看元组类型长啥样子,不想获取内容:

with open('a.file') as f1:
    for pair in (f1,):
        print(pair)
同样省略括号也可以:
with open('a.file') as f1:
    for pair in f1,:
        print(pair)

都会打印<io.TextIOWrapper name='a.txt' mode='r' encoding='utf-8'>

_java_python | 小虾三级 |园豆:984 | 2025-08-25 16:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册