本文主题为测试数据放在哪里
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
问题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构建数据流 - 简书