343118612 发表于 2023-8-18 15:43:30

为什么得到的输出示例(1)还保留着

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

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

isdkz 发表于 2023-8-18 15:44:35

这段代码的作用是从一个名为"论语.txt"的文件中读取内容,并将内容写入一个名为"论语—原文—输出示例.txt"的文件中。在写入过程中,会忽略括号中的内容。

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

所以,这段代码的目的是将"论语.txt"文件中除了括号内的内容以外的所有内容写入到"论语—原文—输出示例.txt"文件中。

smallwh 发表于 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()

343118612 发表于 2023-8-19 14:00:39

smallwh 发表于 2023-8-18 19:11
在for循环开头加入如下语句:

输出结果:


运行还是存在(1{:10_266:})

smallwh 发表于 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)了呀:

343118612 发表于 2023-8-19 20:36:39

smallwh 发表于 2023-8-19 14:42
这个只是用来排错。

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


没问题了,感谢感谢
页: [1]
查看完整版本: 为什么得到的输出示例(1)还保留着