如何解析ini,py,txt文件中配置的参数

本文主题为测试数据放在哪里

python引用外界参数方式

 1 命令行传参

      1.1 简单命令行传参sys.argv
            sys代表system,argv代表argument value
            sys.argv是python的List类型,存储脚本本身名称和命令行传入的参数

#filename = test_sys.py
import sys
sys_list = sys.argv;
print(type(sys_list),sys_list);

执行结果

(venv) D:\PycharmCode\NiuKeTest>python test_sys.py d dd ddd
<class 'list'> ['test_sys.py', 'd', 'dd', 'ddd']


        1.2 复杂命令行传参argparser.ArgumentParser

        argparse模块,代表argument parse
        使用步骤:
            获取解析器parser=argparse.ArgumentParser()
            添加参数parser.add_argument(...)
            解析参数parser.parse_args()

#filename=test_argparse.py
import sys;
import argparse;
parser=argparse.ArgumentParser(); #step1 获取解析器
parser.add_argument('-f',dest="filename"); #step2 通过-f传入参数
parser.add_argument(dest="file1"); #通过位置传入参数
parser.add_argument(dest="file2"); #通过位置传入参数
args = parser.parse_args(); #step3 解析参数
print(args.filename);
print(args.file1);
print(args.file2);
print(sys.argv);

执行结果

D:\PycharmCode\NiuKeTest>python test_argparse.py -f filename F1 F2
filename
F1
F2
['test_argparse.py', '-f', 'filename', 'F1', 'F2']

2 文件传参

        2.1 读文件处理文本 file 不推荐

username=fff
password=123456
with open("username.txt", "r", encoding="utf-8") as f:
    for line in f.readlines():
        data = line.strip("\n").split("=")
        print(type(data), data)

执行结果

python read_txt.py
<class 'list'> ['username', 'fff']
<class 'list'> ['password', '123456']


        2.2 读 .py .pyc文件的参数

        将参数写到python格式的文件,比如字典
        import sys模块,from 配置文件 import 变量;指定配置文件搜索路径

#filename=myconfig.py
my_ID = {
    'name':'fff',
    'height':'177',
    'weight':'140'
}
#filename=test_pymode.py
import sys
from myconfig import my_ID

sys.path.append("./")
print(my_ID)

执行结果

D:\PycharmCode\NiuKeTest>python test_pymode.py
{'name': 'fff', 'height': '177', 'weight': '140'}

备注:os.path和sys.path.append用法

python os.path模块和 sys.path.append模块常用方法详解_u010483897的博客-CSDN博客


       2.3  windows常见配置文件 .ini

        将参数写入.ini配置文件,用ANSI格式保存
        from configparse import ConfigParser
        使用步骤:
            获取解析器cfg = ConfigParser()
            读取文件cfg.read(ini配置文件)
            解析参数cfg.get(...)

# filename = myconfig.ini
# 允许先使用prefix后定义
# 使用"="和使用":"是一致的
# 有注释写在单独的一行,否则会被认为是value的一部分
# bool值可以写true和false不区分大小写,也可以写1和0 
# 注意ini文件用ANSI格式保存
[installation]
library=%(prefix)s/lib  
prefix = /usr/local

[server]
port:8080 
nworkers=32
log_errors=True
show_warnings=1

#filename=tes_win.py
from configparser import ConfigParser

cfg = ConfigParser()
cfg.read("winconfig.ini")
library = cfg.get("installation","library")
port_str=cfg.get("server","port")
port_int=cfg.getint("server","port")
show_warning=cfg.getboolean("server", "log_errors")
print(library,repr(port_str),repr(port_int),show_warning)

执行结果

D:\PycharmCode\NiuKeTest>python test_win.py
/usr/local/lib '8080' 8080 True


    3 模板填充
        使用format填充文件模板

        使用场景:模板文档替换多个位置关键字
        使用步骤
            打开文件with open() as 变量:
            读取内容str=read()
            替换模板中{关键字}str.format(关键字="具体值")

hi,{name};
    您好,我们是XXXX,因XXXXX,所以特邀您参加,地址XXXX,您的席位为{address}。祝好~
                                                                    你的{relation}
                                                                      XXXXXXX
# filename=test_format.py
with open("example.txt",encoding="utf-8") as f:
    str_example = f.read()
    str_out = str_example.format(name="fff",address="7排6号", relation="friend")
    print(str_out)

执行结果 

python test_format.py
hi,fff;
    您好,我们是XXXX,因XXXXX,所以特邀您参加,地址XXXX,您的席位为7排6号。祝好~
                                                                    你的friend
                                                                      XXXXXXX

备注:

问题1:'gbk' codec can't decode byte 0xac

UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 8: illegal multibyte sequence_mghoumin的博客-CSDN博客

问题2:with open as 变量:

python使用with as 读写文件_若爱我菲、-CSDN博客


    4 数据流
        Linux引用管道符

        使用fileinput接收linux管道的内容,使得python脚本成为一连串命令的一环
        使用步骤:
            import fileinput模块
            接收管道内容with fileinput.input() as 变量:
            对内容修改

hi,{name};
    您好,我们是XXXX,因XXXXX,所以特邀您参加,地址XXXX,您的席位为{address}。祝好~
                                                                    你的{relation}
                                                                      XXXXXXX
#filename=test_fileinput.py
import fileinput
with fileinput.input("example.txt",openhook=fileinput.hook_encoded("utf-8")) as f_input:
    for line in f_input:
        line = line.rstrip().replace("X","Z")
        print(line)

执行结果

python test_fileinput.py
hi,{name};
    您好,我们是ZZZZ,因ZZZZZ,所以特邀您参加,地址ZZZZ,您的席位为{address}。祝好~
                                                                    你的{relation}
                                                                      ZZZZZZZ

备注:

问题1:编码问题

fileinput设置编码python_Pythonfileinput模块使用实例_tick-toe的博客-CSDN博客

问题2:pycharm中,执行管道命令cat example.txt |python test_fileinput.py,出现中文乱码

参考文献

python文本处理(一):命令行传参,读取ini配置文件,format填充模板,fileinput构建数据流 - 简书

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值