从每行中提取 char 的位置并提供整个列表中的位置聚合
extract position of char from each row & provide an aggregate of position across a list
我需要一些 python 帮助来解决这个问题。将不胜感激任何帮助!谢谢。
我需要一个包含在方括号中的值的提取矩阵。下面是一个玩具示例:
文件输入将在一个 txt 文件中,如下所示:
AB_1Q[A]IHY[P]GVA
AB_2Q[G][C]HY[R]GVA
AB_3Q[G][C]HY[R]GV[D]
答案out.txt:脚本从输入的每一行中提取包含在sq.brackets“[]”之间的字符的索引,并为整个列表生成索引位置的聚合。然后使用聚合索引从输入文件中提取所有这些位置并生成如下矩阵。
索引 2,3,6,9
AB_1 [A],我,[P],A
AB_2[G],[C],[R],A
AB_3[G],[C],[R],[D]
如有任何帮助,我们将不胜感激!。谢谢。
如果您想将 table 减少到仅包含方括号条目的列,您可以这样做:
import re
def transpose(matrix):
return [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))]
with open("test_table.txt", "r") as f:
content = f.read()
rows = [re.findall(r'(\[.\]|.)', line.split()[1]) for line in content.split("\n")]
columns = transpose(rows)
matching_columns = [[str(i + 1)] + column for i, column in enumerate(columns) if "[" in "".join(column)]
matching_rows = transpose(matching_columns)
headline = ["Index {}".format(",".join(matching_rows[0]))]
target_table = headline + ["AB_{0} {1}".format((i + 1), ",".join(line)) for i, line in enumerate(matching_rows[1:])]
with open("out.txt", "w") as f:
f.write("\n".join(target_table))
首先,您希望 .txt 文件的内容用数组表示。不幸的是,您的输入数据还没有分隔符(如 .csv 文件),因此您需要注意这一点。要整理出这样的字符串 "Q[A]IHY[P]GVA"
,我建议使用正则表达式。
import re
cells = re.findall(r'(\[.\]|.)', "Q[A]IHY[P]GVA")
r''
字符串中的模式匹配 方括号中的单个字符 或 只是一个单个字符。 re.findall()
方法 returns 所有匹配子字符串的列表,在这种情况下:['Q', '[A]', 'I', 'H', 'Y', '[P]', 'G', 'V', 'A']
rows = [re.findall(r'(\[.\]|.)', line.split()[1]) for line in content.split("\n")]
将此方法应用于文件中的每一行。 line.split()[1]
将省略行标签“AB_X”,因为它没有用。
将数据按 columns
排序更合适,因为您希望保留所有符合特定条件的列(包含括号中的条目)。为此,您只需转置 rows
。这是由 transpose()
函数完成的。如果你导入了 numpy numpy.transpose(rows)
我猜是更好的选择。
接下来您想要获取所有满足您的条件的列"[" in "".join(column)
。一行完成:matching_columns = [[str(i + 1)] + column for i, column in enumerate(columns) if "[" in "".join(column)]
这里 [str(i + 1)]
确实添加了您以后要使用的列索引。
现在剩下的很简单:将列转回行,重新标记行,将行数据格式化为适合您所需输出格式的字符串,然后将这些字符串写入 out.txt
文件。
我需要一些 python 帮助来解决这个问题。将不胜感激任何帮助!谢谢。
我需要一个包含在方括号中的值的提取矩阵。下面是一个玩具示例:
文件输入将在一个 txt 文件中,如下所示:
AB_1Q[A]IHY[P]GVA
AB_2Q[G][C]HY[R]GVA
AB_3Q[G][C]HY[R]GV[D]
答案out.txt:脚本从输入的每一行中提取包含在sq.brackets“[]”之间的字符的索引,并为整个列表生成索引位置的聚合。然后使用聚合索引从输入文件中提取所有这些位置并生成如下矩阵。
索引 2,3,6,9
AB_1 [A],我,[P],A
AB_2[G],[C],[R],A
AB_3[G],[C],[R],[D]
如有任何帮助,我们将不胜感激!。谢谢。
如果您想将 table 减少到仅包含方括号条目的列,您可以这样做:
import re
def transpose(matrix):
return [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))]
with open("test_table.txt", "r") as f:
content = f.read()
rows = [re.findall(r'(\[.\]|.)', line.split()[1]) for line in content.split("\n")]
columns = transpose(rows)
matching_columns = [[str(i + 1)] + column for i, column in enumerate(columns) if "[" in "".join(column)]
matching_rows = transpose(matching_columns)
headline = ["Index {}".format(",".join(matching_rows[0]))]
target_table = headline + ["AB_{0} {1}".format((i + 1), ",".join(line)) for i, line in enumerate(matching_rows[1:])]
with open("out.txt", "w") as f:
f.write("\n".join(target_table))
首先,您希望 .txt 文件的内容用数组表示。不幸的是,您的输入数据还没有分隔符(如 .csv 文件),因此您需要注意这一点。要整理出这样的字符串 "Q[A]IHY[P]GVA"
,我建议使用正则表达式。
import re
cells = re.findall(r'(\[.\]|.)', "Q[A]IHY[P]GVA")
r''
字符串中的模式匹配 方括号中的单个字符 或 只是一个单个字符。 re.findall()
方法 returns 所有匹配子字符串的列表,在这种情况下:['Q', '[A]', 'I', 'H', 'Y', '[P]', 'G', 'V', 'A']
rows = [re.findall(r'(\[.\]|.)', line.split()[1]) for line in content.split("\n")]
将此方法应用于文件中的每一行。 line.split()[1]
将省略行标签“AB_X”,因为它没有用。
将数据按 columns
排序更合适,因为您希望保留所有符合特定条件的列(包含括号中的条目)。为此,您只需转置 rows
。这是由 transpose()
函数完成的。如果你导入了 numpy numpy.transpose(rows)
我猜是更好的选择。
接下来您想要获取所有满足您的条件的列"[" in "".join(column)
。一行完成:matching_columns = [[str(i + 1)] + column for i, column in enumerate(columns) if "[" in "".join(column)]
这里 [str(i + 1)]
确实添加了您以后要使用的列索引。
现在剩下的很简单:将列转回行,重新标记行,将行数据格式化为适合您所需输出格式的字符串,然后将这些字符串写入 out.txt
文件。