鱼C论坛

 找回密码
 立即注册
查看: 1421|回复: 6

[已解决]为什么得到的输出示例(1)还保留着

[复制链接]
发表于 2023-8-18 15:43:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
fi=open("论语.txt","r",encoding="utf-8")
fo=open("论语—原文—输出示例.txt","w")
flag=True
for i in fi:
    if i=="(":
        flag=False
    if i==")":
        flag=True
        continue
    if flag:
        fo.write(i)
        
fi.close()
fo.close()
   
最佳答案
2023-8-18 15:44:15
根据你提供的代码,它的功能是将一个文件中的内容按行读取,并将不包含括号的行写入另一个文件。

代码中的flag变量用来标记是否需要写入当前的行。开始时,flag被设置为True,表示需要写入内容;当遇到括号时,flag会被置为False,表示在括号中的内容不需要写入;再次遇到括号时,flag又被置为True

这样设计的目的是过滤掉括号中的内容,只保留不含括号的行。然后将这些行写入到另一个文件中。

如果你的输出示例(1)仍然包含括号,可能是因为输入文件中存在其他类型的括号字符,代码没有进行处理。你可以检查一下输入文件中是否存在其他类型的括号字符,如方括号 [ ]、尖括号 < > 等。如果存在其他类型的括号,你可以相应地进行修改代码,使其适配所有类型的括号。

希望能解答你的疑问!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

论语.txt

47 Bytes, 下载次数: 3

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-18 15:44:15 | 显示全部楼层    本楼为最佳答案   
根据你提供的代码,它的功能是将一个文件中的内容按行读取,并将不包含括号的行写入另一个文件。

代码中的flag变量用来标记是否需要写入当前的行。开始时,flag被设置为True,表示需要写入内容;当遇到括号时,flag会被置为False,表示在括号中的内容不需要写入;再次遇到括号时,flag又被置为True

这样设计的目的是过滤掉括号中的内容,只保留不含括号的行。然后将这些行写入到另一个文件中。

如果你的输出示例(1)仍然包含括号,可能是因为输入文件中存在其他类型的括号字符,代码没有进行处理。你可以检查一下输入文件中是否存在其他类型的括号字符,如方括号 [ ]、尖括号 < > 等。如果存在其他类型的括号,你可以相应地进行修改代码,使其适配所有类型的括号。

希望能解答你的疑问!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-18 15:44:35 | 显示全部楼层
这段代码的作用是从一个名为"论语.txt"的文件中读取内容,并将内容写入一个名为"论语—原文—输出示例.txt"的文件中。在写入过程中,会忽略括号中的内容。

在这段代码中,变量 flag 被用来表示是否需要写入当前读取的字符。初始状态下, flag 被设置为 True ,表示需要写入字符。当读取到左括号"("时, flag 被设置为 False ,表示不需要写入字符。当读取到右括号")"时, flag 被设置为 True ,表示需要写入字符。在每次循环中,如果 flag 为 True ,则将当前字符写入输出文件中。

所以,这段代码的目的是将"论语.txt"文件中除了括号内的内容以外的所有内容写入到"论语—原文—输出示例.txt"文件中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-18 19:11:45 | 显示全部楼层
在for循环开头加入如下语句:
print(i,type(i))
输出结果:
考虑是否就是(1)
 <class 'str'>
2.考虑是否就是
 <class 'str'>

 <class 'str'>
可见for循环是按行读取文件。
解决方案:使用read()方法读取整个文件,返回的是一个字符串
fi = open("论语.txt","r",encoding="utf-8")
fo = open("论语—原文—输出示例.txt","w")
string = fi.read()
flag = True

for i in string:
    if i == "(":
        flag = False
    if i == ")":
        flag = True
        continue
    if flag:
        fo.write(i)
        
fi.close()
fo.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-19 14:00:39 | 显示全部楼层
smallwh 发表于 2023-8-18 19:11
在for循环开头加入如下语句:

输出结果:

运行还是存在(1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-19 14:42:47 | 显示全部楼层
本帖最后由 smallwh 于 2023-8-19 14:46 编辑
在for循环开头加入如下语句:
print(i,type(i))

这个只是用来排错。

正确的代码是下面的(我试了,不应该存在(1)才对啊)
解决方案:使用read()方法读取整个文件,返回的是一个字符串
fi = open("论语.txt","r",encoding="utf-8")
fo = open("论语—原文—输出示例.txt","w")
string = fi.read()
flag = True
…………


这是我运行后的文件截图,没有(1)了呀:

运行后的文件截图

运行后的文件截图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-19 20:36:39 | 显示全部楼层
smallwh 发表于 2023-8-19 14:42
这个只是用来排错。

正确的代码是下面的(我试了,不应该存在(1)才对啊)

没问题了,感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 08:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表