一个python的for循环问题!

ceshi2.txt内容为:12345ceshi3.txt内容为:567892fl1=open(r'ceshi2.txt',"r")3fl2=open(r'ceshi3.... ceshi2.txt内容为:
1
2
3
4
5
ceshi3.txt内容为:
5
6
7
8
9

2 fl1=open(r'ceshi2.txt',"r")
3 fl2=open(r'ceshi3.txt',"r")
4 for ii in fl2:
5 print ii
6 for i in fl1:
7 print i

8 fl1=[1,2,3,4,5]
9 fl2=[5,6,7,8,9]
10 for ii in fl2:
11 print ii
12 for i in fl1:
13 print i
为什么2-7行运行结果和8-13行的结果不一样阿?
怎样才能让第一个达到第二个的效果?
展开
 我来答
王改很改
2014-04-15 · TA获得超过222个赞
知道答主
回答量:8
采纳率:0%
帮助的人:9.9万
展开全部
在你问问题之前
希望提醒你以后提这样的问题的时候把你得到的结果也发上来
这样才能让回答的人有效率的回答
幸亏是一个这样很简单的循环

如果到了比较复杂的工程
你难道让大家自己运行一下试试看么

========================分割线==============================

根据你下面的补充
你必须要知道你用open()赋值给fl1的是什么东西
你如果翻阅文档(在idle里按F1)
或者哪怕用type来观察就能知道你得到的是一个文件object
那么你用forloop来循环读出fl1的时候在ii第一次循环的时候就已经读到文件末端了
而它不会像列表一样能在每个循环里再输出一遍

你就这么理解
open得到的和[ ]是不同的东西
不同的东西的操作不同

具体怎么不同
什么时候用什么
我觉得我也不怎么会讲
讲了有些细节可能会有错误的
当然哪怕说明白了你也不见的懂
因为会牵扯一些其他的知识
你学到一定高度就自然理解了

多翻翻文档和书籍
多操作和比较就可以了
这种问题其实坐等答案
比较耽误你自己时间的

以上
追问
其实后来我猜到可能是这个原因,那请问我应该如何解决这种两个嵌套的文件循环呢?
追答
seek当然也可以
但是多个seek会影响到运行速度
所以在并不是很大数量的情况下
将内容提出来是一个可行的方法

而且你这种题目本身的意义并不大
仅仅是一个练习而已
很多东西要根据具体的情况来判断的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tim_spac
2014-04-15 · TA获得超过3628个赞
知道大有可为答主
回答量:1804
采纳率:100%
帮助的人:2022万
展开全部

从文件里读出来的是带有换行符号的行,print时会换行

若要第同第二段代码的效果, 需增加剔除行尾换行符号及空格的strip方法:

for ii in fl2:
    print ii.strip()
    for i in fl1:
        print i.strip()
更多追问追答
追问
我不是遇到了你说的问题:
第二段运行结果如下:

5
1
2
3
4
5
6
1
2
3
4
5
7
1
2
3
4
5
8
1
2
3
4
5
9
1
2
3
4
5

第一段运行如下:

5
1
2
3
4
5
6
7
8
9
追答
fl1=[ln.strip() for ln in open(r'ceshi2.txt',"r")]
fl2=[ln.strip() for ln in open(r'ceshi3.txt',"r")]
for ii in fl2:
    print ii
    for i in fl1:
        print i
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
acrofox
2014-04-15 · TA获得超过577个赞
知道小有建树答主
回答量:346
采纳率:0%
帮助的人:300万
展开全部

2-7行中加 .strip()

print ii.strip()
print i.strip()
追问
我不是遇到了你说的问题:
第二段运行结果如下:

5
1
2
3
4
5
6
1
2
3
4
5
7
1
2
3
4
5
8
1
2
3
4
5
9
1
2
3
4
5

第一段运行如下:

5
1
2
3
4
5
6
7
8
9
追答

因为第一次外循环结束时,内循环已经执行过一次,fl1 已经读到文件末尾,不会自动回到文件开头再读一遍。

可以把文件先读到数组中再循环,或者加个 fl1.seek(0)

for ii in fl2:
    print ii.strip()
    for i in fl1:
        print i.strip()
    fl1.seek(0)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式