我有一个包含大量信息的txt文件。在我的脚本中,我打开这个文件并使用内置函数和正则表达式删除不必要的东西,这是在for循环中完成的。
考虑如下所示的txt文件:
Monkey OFF OFF
大象ON ON
依旧......
我的剧本:
x = 'XXX'
y = 'YYY'
value = ''
name = ''
func_file, functionality_file_context = open_func_file(args)
for fline in functionality_file_context:
if fline.strip(): # ignore empty lines or lines with only whitespace
commentregex = re.compile('^[^#]') # ignore lines that start with comment (#)
if (commentregex.match(fline)):
# replace tabs with whitespace
replacetab = re.compile(r'\s+')
fline = replacetab.sub(' ', fline)
function_line = fline.split(' ', 2)
if len(function_line) != 3:
exit("Something wrong with this line: " + fline.strip() + "\" in: " + func_file)
name = x + function_line[0].strip() + y
value = func_override_parameter_value(fline, func_file, function_line,value)
print name + value
myDict = {
"Bike": 0,
"Car": 2,
name: value
}
another_function(args.path, myDict)
如果例如OFF OFF匹配等,func_override_parameter_value
检查应该给出什么值。例如OFF OFF = 1,ON ON = 2
通过打印(print name + value
),我获得了具有正确指定值的所有名称。
open_func_file函数:
def open_func_file(args):
functionality_file_context = ''
func_file = ''
for func_file in args.functionality_file:
functionality_file_context = open(func_file).readlines()
return func_file, functionality_file_context
现在到了这一点:
我在这个for循环运行之后有一个dict,它已经包含了一些键和值,例如:
myDict = {
"Bike": 0,
"Car": 2,
}
我想从我刚刚解析的文件中添加新的密钥和值"。我试着在字典中调用名字和值:
myDict = {
"Bike": 0,
"Car": 2,
name: value
}
最终结果应为:
myDict = {
"Bike": 0,
"Car": 2,
"XXXMonkeyYYY": 1,
"XXXElephantYYY": 2
}
但这只是给了我"大象":2并且跳过猴子。不知道怎么解决这个问题?订单无关紧要。
制作编辑
答案 0 :(得分:3)
将代码放在循环内的字典中,放在print
旁边。 name
和value
一次只能保留一个值,他们无法神奇地记住他们曾经去过的所有内容,并且知道插入你的词典的正确方法。
答案 1 :(得分:1)
如果来自@ alex-hall的猜测和简明建议对于OP来说不够明确。也许是这样的:
#! /usr/bin/env python
from __future__ import print_function
import re
def open_func_file(args):
functionality_file_context = ''
func_file = ''
for func_file in args.functionality_file:
functionality_file_context = open(func_file).readlines()
return func_file, functionality_file_context
def func_override_parameter_value(
fline, func_file, function_line, value):
"""Mocking the undefined function."""
return 42
args = "some_file_name"
x = 'XXX'
y = 'YYY'
value = ''
name = ''
myDict = {
"Bike": 0,
"Car": 2,
}
commentregex = re.compile('^[^#]') # ignore lines that start with comment (#)
func_file, functionality_file_context = open_func_file(args)
for fline in functionality_file_context:
if fline.strip(): # ignore empty lines or lines with only whitespace
if (commentregex.match(fline)):
# replace tabs with whitespace
replacetab = re.compile(r'\s+')
fline = replacetab.sub(' ', fline)
function_line = fline.split(' ', 2)
if len(function_line) != 3:
exit("Something wrong with this line: "
"" + fline.strip() + "\" in: " + func_file)
name = x + function_line[0].strip() + y
value = func_override_parameter_value(
fline, func_file, function_line, value)
print(name + str(value))
myDict[name] = value
提示:向下滚动到上面代码的最后一行,它只是说明:
myDict[name] = value