1、
今天做了第八课的习题
实现了cut命令部分功能
实现命令入下:
test_cut.py 456.txt -f 3,5 -d ":"
test_cut.py 123.txt -f 3,5 -d " "
注意win环境下 -d后面的参数需要双引号,通过isspace()判断可以忽略空格个数,win环境输入-d ’ '会报error: unrecognized arguments: ’ 的错误, 但是在Linux环境下就可以单引号输入参数。
2、test_cut.py 如下:
import argparse
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("filename")
parser.add_argument("-d", "--delimiter", type=str)
parser.add_argument("-f", "--fields", nargs='+')
return parser.parse_args()
def cut_func(args):
with open(args.filename, 'r', encoding='utf-8') as f:
for line in f.readlines():
for field in args.fields[0].split(','):
if args.delimiter.isspace():
print(line.split()[int(field)-1], end="\t")
else:
print(line.split(args.delimiter)[int(field)-1], end="\t")
print(end='\n')
args = parse_args()
cut_func(args)
说明:
1、运行环境python3.7 pycharm;
2、https://github.com/zedshaw/learn-more-python-the-hard-way-solutions 有原作者的code;
3、遇到的问题:
parse_args()里面:
nargs=’+’,至少要有一个f的参数值,nargs=’*’,f的参数值可以为0
nargs=num返回的是一个长度为1的list比如[‘3,4’],所有的参数值都放在一起了
type=list, 返回的是这样的[[‘3’, ‘,’, ‘4’, ‘,’]]结果
4、cut截取数据是从1开始;
5、作者zed只用了5分钟,完成的命令入下:
python3.6 cut.py " " 10
但是他是处理input的数据,再拆分的,而我是去直接拆分一个"123.txt"这样的文件