正如您在下面的代码中所说:很多行都是重复的。
四个关键字['copy', 'scale', 'add', 'triad']
都涉及到所有内容,是否可以只编写一行line.startswith
和list.append
,并以某种方式动态地将四个关键字替换为正确的位置?
我正在阅读的文件格式如下(我编号):
复制:1 2 3 4
比例:1 2 3 4
加:1 2 3 4
黑社会:1 2 3 4
我所关心的只是first column
,这是所有的1s
copy_s = []
scale_s =[]
add_s = []
triad_s = []
with open('./a_file') as f:
for line in f:
line = line.strip().lower()
if line.startswith('copy'):
copy_s.append(float(line.split()[1]))
continue
elif line.startswith('scale'):
scale_s.append(float(line.split()[1]))
continue
elif line.startswith('add'):
add_s.append(float(line.split()[1]))
continue
elif line.startswith('triad'):
triad_s.append(float(line.split()[1]))
continue
P.S。我应该在StackOverflow或Code Review中询问此类问题吗?
答案 0 :(得分:0)
您可以使用字典存储前缀和相应的值:
d = {}
with open('./a_file') as f:
for line in f:
line = line.strip().lower()
prefix, num = line.split(':')[0], float(line.split()[1])
d[prefix] = num
如果订单重要,请使用collections.OrderedDict
。
答案 1 :(得分:0)
定义一个动态变量,选择要实际追加的数组,然后按如下方式更改elif块:
if line.startswith('copy'):
array = copy_s
elif line.startswith('scale'):
array = scale_s
elif line.startswith('add'):
array = add_s
elif line.startswith('triad'):
array = triad_s
endif
array.append(float(line.split()[1]))