Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 给定这个字符串输入,我如何生成这个给定的输出?_Python_Python 3.x - Fatal编程技术网

Python 给定这个字符串输入,我如何生成这个给定的输出?

Python 给定这个字符串输入,我如何生成这个给定的输出?,python,python-3.x,Python,Python 3.x,我想把上面的字符串转换成下面的格式化字典。间距和额外的文本是故意这样的。应删除/去除间距和注释文本 s = """ ID# VALUE_1 VALUE_2 1 0.1 300 2 0.2 400 (11 - this text is part of C in row 2 but needs to be ignored / removed) 3 0.9 600""" 到目前为止,我所尝试的:

我想把上面的字符串转换成下面的格式化字典。间距和额外的文本是故意这样的。应删除/去除间距和注释文本

s = """
ID# VALUE_1 VALUE_2
  1      0.1          300
  2   0.2             400 (11 - this text is part of C in row 2 but needs to be ignored / removed)
  3          0.9          600"""
到目前为止,我所尝试的:

print(my_dict)
{'1': {'VALUE_1': '0.1', 'VALUE_2': '300'}, '2': {'VALUE_1': '0.2', 'VALUE_2': '400'}, '3': {'VALUE_1': '0.9', 'VALUE_2': '600'}}
这最终会输出一个外观丑陋的未格式化字典:

s = """
ID# VALUE_1 VALUE_2
  1      0.1          300
  2   0.2             400 (11 - this text is part of C in row 2 but needs to be ignored / removed)
  3          0.9          600"""

#Get the columns and assign them to a variable.
columns = s.lstrip().splitlines()[0] #Print the first line of the string

dct = {}

rows = s.lstrip().splitlines()

for data in rows[1:]:
    row = data.split()
    dct[row[0]] = dict(zip(columns[1:], row[1:]))

print(dct)

我无法在当前循环过程中成功地去除第2行上的空格和额外数据块。

您的代码中有一个小错误

{'1': {'D': '0.1', '#': '300'}, '2': {'D': '0.2', '#': '400', ' ': 'in', 'V': 'row', 'A': '2', 'L': 'but', 'U': 'needs', 'E': 'to', '_': 'be', '1': 'C', '2': 'ignored'}, '3': {'D': '0.9', '#': '600'}}
没有列出清单。使用:

columns = s.lstrip().splitlines()[0]
进行此修改后,您的代码应该可以正常运行


此外,即兴创作,你根本不应该使用专栏。只需将其替换为行[0]。

代码中有一个小错误

{'1': {'D': '0.1', '#': '300'}, '2': {'D': '0.2', '#': '400', ' ': 'in', 'V': 'row', 'A': '2', 'L': 'but', 'U': 'needs', 'E': 'to', '_': 'be', '1': 'C', '2': 'ignored'}, '3': {'D': '0.9', '#': '600'}}
没有列出清单。使用:

columns = s.lstrip().splitlines()[0]
进行此修改后,您的代码应该可以正常运行


此外,即兴创作,你根本不应该使用专栏。只需将其替换为行[0]。

A
regex
解决方案对我来说似乎更整洁:


检查
regex
是如何工作的一个
regex
解决方案,在我看来更整洁:


检查
regex
如何工作

,他们可以只使用
行[0]
;将
赋值向下移动几行,避免两次剥离和拆分。@MartijnPieters您能澄清一下吗?@IanSmith:看一下对
所做的工作。您可以使用
columns=rows[0].split()
代替,以避免剥离和拆分较大的
s
字符串。是的,@MartijnPieters是正确的。你看,列只是行[0],为什么要保留两次呢?@IanSmith:正是这样。他们可以只使用
行[0]
;将
赋值向下移动几行,避免两次剥离和拆分。@MartijnPieters您能澄清一下吗?@IanSmith:看一下对
所做的工作。您可以使用
columns=rows[0].split()
代替,以避免剥离和拆分较大的
s
字符串。是的,@MartijnPieters是正确的。你看,列只是行[0],为什么要保留两次呢?@IanSmith:完全一样。太棒了!前几天晚上我在学习一些正则表达式,看看这是否是一个可行的选择。你是凭记忆还是有工具可以帮你?regex101.com是一个很棒的工具!检查我的更新。干杯,太棒了!前几天晚上我在学习一些正则表达式,看看这是否是一个可行的选择。你是凭记忆还是有工具可以帮你?regex101.com是一个很棒的工具!检查我的更新。干杯@IanSmith