Python不替换为fi

2024-06-01 00:37:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一部分python代码没有用值更新我的文本文件,请帮助我修复代码

我的代码:

import re
import collections
class Group:
    def __init__(self):
        self.members = []
        self.text = []

with open('textaweq1.txt', "r+") as f:
    # so specific lines can be edited
    lines = f.readlines()

    groups = collections.defaultdict(Group)
    group_pattern = re.compile(r'^(\S+)\((.*)\)$')
    current_group = None

    for line in range(len(lines)):
        curr_line = lines[line]

        # to prevent searches on lines with no group
        if "(" in curr_line:
            curr_line = curr_line.strip()
            m = group_pattern.match(curr_line)
            if m:
                group_name, group_members = m.groups()
                groups[group_name].members += filter(lambda x: x not in groups[group_name].members, group_members.split(','))
                current_group = group_name

    already_seen = []
    for line in range(len(lines)):
        curr_line = lines[line]

        for key in groups.keys():
            if key in curr_line.strip():
                if key in already_seen:
                    lines[line] = ""
                else:
                    already_seen.append(key)
                    open_par = curr_line.index("(")
                    close_par = curr_line.index(")")

                    member_str = ",".join(groups[key].members)

                    lines[line] = curr_line[:open_par+1] + member_str + curr_line[close_par:]
                    print groups[key].members
                    if 'skoda' in groups[key].members:
                        print 'yes'
                    listnames=[]
                    if 'skoda' in groups[key].members:
                        listnames.append('animal')
                    if 'dog' in groups[key].members:
                        listnames.append('animal')
                    allText = f.read()
                    allText = allText.replace('pets()', 'pets(' + ', '.join(listnames) + ')') # or use re python
                    f.write(allText)


    # clear the file and reset the file cursor
    f.truncate()
    f.seek(0)

    for line in lines:
        f.write(line)

错误:

  File "C:\Python27\awegedir.py", line 54, in <module>
    f.write(allText)
IOError: [Errno 0] Error

但我的代码并没有编写和回复pets(),它与文本文件保持相同。 请指出我在代码上的错误并改正!你知道吗


Tags: key代码nameinforiflinegroup
1条回答
网友
1楼 · 发布于 2024-06-01 00:37:26

你要做的是:

  1. 把单词读入一列行中
  2. 从同一个文件句柄读取更多内容。第二次读取不会做任何事情,因为您已经读取了所有内容-它将返回一个空字符串。所以allText将是空的。你知道吗
  3. 因为allText是空的,.replace()没有任何效果
  4. 然后将此空字符串附加到文件的末尾->;再次无效
  5. 然后截断文件(删除f.write(allText)本可以做的任何更改)
  6. 然后将原始行写回文件(这也会覆盖f.write()所做的任何更改)。你知道吗

总而言之,你的方法在我看来很复杂。尝试将其分为几个步骤:

  1. 将文件加载到数据结构中(可能是行列表)
  2. 首先收集所有的钥匙等
  3. 然后替换每行中的图案
  4. 关闭文件(=离开with open(..., 'r')块)
  5. 再次打开文件进行写入,并将所有行写入文件

相关问题 更多 >