我是编码的新手(累计学习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())
您能给我一些有关如何格式化文本的概念的指导吗?
免责声明:我读过很多其他文章,但是找不到一个可以帮助我完成任务的文章。
答案 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')