如何在python 3.6中编辑多行文本文件?

时间:2018-08-12 23:42:12

标签: python python-3.x text

我是编码的新手(累计学习2周)。我正在使用python 3.6。 目前,我正在尝试读取包含文本(copy.txt)的文件,对其进行编辑并写入另一个文件(paste.txt)。

Copy.txt看起来像这样:

_name

我希望文本在paste.txt中看起来像这样(格式化后):

  ;ROLE_NAME                                                     ;GRANTOR  
1 ;rolea                                                         ;SYS      
2 ;rolec                                                         ;SYSTEM   
3 ;roley                                                         ;_SYS_REPO
4 ;rolez                                                         ;_SYS_REPO

我现在所做的-读取文件copy.txt,该文件与脚本位于相同的目录:

SYS
grant rolea to user

SYSTEM
grant rolec to user

_SYS_REPO
grant roley to user
grant rolez to user

我不知道如何在每一行中进行更改。我正在考虑制作一个具有两个值的字典,并使用f.split(';')分配这些值。 我也很努力地计算行数,并使用以下代码循环编辑每一行:

from os.path import abspath, exists

f_path = abspath("copy.txt")


if exists(f_path):
        with open(f_path) as f:
        print (f.read())

您能给我一些有关如何格式化文本的概念的指导吗?

免责声明:我读过很多其他文章,但是找不到一个可以帮助我完成任务的文章。

1 个答案:

答案 0 :(得分:0)

您在思考创建字典的正确道路上。您可以创建将grantors映射到roles列表的字典。

首先,您需要像完全一样读入文件:

from os.path import abspath, exists

f_path = abspath("copy.txt")

if exists(f_path):
    with open(f_path) as f:
        lines = f.readlines()

lines只是"copy.txt"

中的行的列表

然后您需要创建该词典:

role_dict = {}
for line in lines[1:]:
    split_line = line.split(';')
    role = split_line[1].strip()
    grantor = split_line[2].strip()
    if grantor in role_dict:
        role_dict[grantor].append(role)
    else:
        role_dict[grantor] = [role]

在您给出的示例中,role_dict如下所示:

{'SYS': ['rolea'], 'SYSTEM': ['rolec'], '_SYS_REPO': ['roley', 'rolez']}

最后,您只需要按顺序将其写出:

with open('paste.txt', 'w') as f:
    for grantor in sorted(role_dict.keys()):
        roles = role_dict[grantor]
        f.write(grantor + '\n')
        for role in roles:
            f.write('grant {} to user\n'.format(role))
        f.write('\n')