python中文件的随机搜索与修改

2024-06-16 09:35:16 发布

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

我觉得这很简单,但是我对python的了解还不足以正确地完成它。在

我有两个文件:

  1. 文件中列出一个id号以及是否使用了该id。格式为“id,isUsed”。在
  2. 包含每个id包含一个规则的规则的文件

所以我要做的是通过id used对解析文件,然后根据这些信息,在第二个文件中找到相应的规则,然后根据该规则对规则进行注释或取消注释。在

有没有一种简单的方法可以在第二个文件中搜索我要查找的规则,而不是每次都逐行搜索?另外,每次更改文件时都必须重新写入文件吗。在

以下是到目前为止我还不知道实现modifyRulesFile()的最佳方法:

def editRulesFile(pairFile, ruleFile): 
    pairFd = open(pairFile, 'r')
    ruleFd = open(ruleFile, 'rw')

    for line in pairFd.readLine():
        id,isUsed = line.split(',')

        modifyRulesFile(ruleFd, id, isUsed)

def modifyRulesFile(fd, id, isUsed):
    for line in fd.readLine():
        # Find line with id in it and add a comment or remove comment based on isUsed

Tags: 文件方法inidfor规则defline
2条回答

我不知道为什么我以前没有想到这个,但是有另一种方法。在

首先,你把哪些规则应该使用(或不使用)到内存中,我把它存储到字典中。在

def readRulesIntoMemory(fileName):
    rules = {}

    # Open csv file with rule id, isUsed pairs
    fd = open(fileName, 'r')
    if fd:
        for line in fd.readlines():
            id,isUsed = line.split(',')
            rules[id] = isUsed

然后,在读取另一个文件中的当前规则列表时,将更改写入临时文件。在

^{pr2}$

现在我们可以复制新的临时文件,如果我们想的话。在

我建议您将规则文件读入词典(id->;rule)。然后,当您读取配置文件时,写出相应的规则(如果需要,包括注释)。在

一些伪代码:

rules = {}
for id, rule in read_rules_file():
    rules[id] = rule
for id, isUsed in read_pairs_file():
    if isUsed:
       write_rule(id, rules[id])
    else:
       write_commented_rule(id, rules[id])

这样,每个文件只传递一次。如果规则文件变得很长,可能会耗尽内存,但是,好吧,这通常需要很长时间才能发生!在

可以使用生成器避免一次将所有对保留在内存中:

^{pr2}$

相关问题 更多 >