Python 从单个列表中提取多个数据

Python 从单个列表中提取多个数据,python,list,debugging,Python,List,Debugging,我正在处理包含多个信息的文本文件。我用python将其转换为一个列表,现在我正试图将不同的数据分离到不同的列表中。数据如下所示: 编码/描述/统一/值1/值2/值3/值4,然后重复,示例如下: P03133 Auxiliar helper un 203.02 417.54 437.22 675.80 到目前为止,我的做法是: 创建列表以存储每个信息: codes = [] description = [] unity = [] cost = [] 通过循环根据代码的结构查找代码,并使用代码的

我正在处理包含多个信息的文本文件。我用python将其转换为一个列表,现在我正试图将不同的数据分离到不同的列表中。数据如下所示:

编码/描述/统一/值1/值2/值3/值4,然后重复,示例如下:

P03133 Auxiliar helper un 203.02 417.54 437.22 675.80
到目前为止,我的做法是:

创建列表以存储每个信息:

codes = []
description = []
unity = []
cost = []
通过循环根据代码的结构查找代码,并使用代码的索引作为基础来查找剩余值

找到一个代码很容易,它是其他数据中一种独特的信息类型。 对于其余的值,我做了一个循环,以查找代码后面的下一个数值。这样我就可以划分其余的索引:

  • 该单位将是代码的索引+索引,直到
    isnumeric
    -1,因此它是每行中第一个数值之前的第一个信息

  • 成本将是代码的索引+索引,直到
    isnumeric
    +2,第三个值是我需要存储的唯一值

  • 描述有点难,组成它的元素的数量在列表中有所不同。所以我使用了从代码的索引+1开始到索引结束的切片,直到
    isnumeric
    -2

我在使用这种方法时遇到了一些问题,尽管在代码出现错误后,列表中总会有更多的元素:

  while not txtl[i+j].isnumeric():
    txtl[i+j] list index out of range.
接受任何调试代码的解决方案,甚至是问题的新解决方案


OBS:我还需要对一种非常相似的数据字体执行此操作,但代码将只是一个由7个数字组成的序列,因此在其他数据中很难找到。任何包含此方面的解决方案都将受到赞赏

稍微增加一点代码就可以解决这个问题:

而i+j
第一个条件在超出边界时失败,因此第二个条件不会被检查

此外,请使用dict项目列表,而不是4个不同的列表,fe:

thelist=[]
追加({'code':69,'description':'random text','unity':'whatever','cost':'your life'})
通过这种方式,列表中始终有正确的值,并且不需要使用索引或其他黑魔法跟踪您的位置

评论交互后编辑: 好的,在本例中,您将要处理的行拆分为空格字符,然后处理行中的单词

从pprint导入pprint#仅用于漂亮的打印
textl='P03133辅助助手un 203.02 417.54 437.22 675.80'
_列表=[]
def手柄线(文本:str):
描述=“”
统一=无
值=[]
对于textl.split()中的单词[1:]:
#默认情况下,它按空格字符拆分
#您可以忽略列表中的第一项,因为这始终是代码
#str.isnumeric()不处理浮点,只处理整数。看见https://stackoverflow.com/a/23639915/9267296
如果不是word.replace(',','').replace(','').isnumeric():
如果len(描述)==0:
描述=单词
其他:
description=f'{description}{word}'#我喜欢f字符串
如果不是统一:
#如果统一仍然没有,那就意味着它还没有建立
统一=文字
其他:
values.append(word)
返回{'code':textl.split()[0],'description':description,'unity':unity,'values':values}
追加(句柄行(textl))
pprint(_列表)

str.isnumeric()
不处理浮点,只处理整数。请参见

您能否将TXT文件转换为CSV文件?CSV很容易用任何语言阅读。也许这就是你的解决方案?我没有CSV文件的经验。。。您认为它会帮助分别划分和操作每个数据吗?这取决于您的整个项目。CSV表示逗号分隔的值。已经有很多例程和代码可以精确地读取和操作这个文件扩展名。我明白了,谢谢你的提示。我唯一想知道的是,我将如何识别其中的不同值。这仍然是一个有点棘手的挑战。你知道TXT文件是什么吗?意思是,他们来自哪里,他们有什么信息,等等。。。如果没有,你想做的事情就会变得非常困难。否则,如果您知道文件中的每一行包含什么类型的数据,就变得容易多了。有很多种方法可以将这些数据提取到向量、列表和矩阵中。这解决了这个问题,多亏了编辑技巧,但现在我的append出现了错误,当我尝试:list.append(txtl[I+j])时,它又超出了范围……就我的理解而言,一行总是
[code][DESCRIPTION TEXT BLOCK][UNITY][LIST OF MORE VALUES]
,UNITY始终是描述文本块之后的第一个数字内容?UNITY是一个字符串,通常是un,m,month。它位于每行第一个数字内容之前。其余内容都正确!一个简短问题,
[LIST OF MORE VALUES]
是实际行的结尾,对吗?是的,它是:[code][DESCRIPTION TEXT BLOCK][UNITY][VALUE1][VALUE2][VALUE3][VALUE4],然后在下面的新行中重新开始。
  while not txtl[i+j].isnumeric():
    txtl[i+j] list index out of range.