使用regex向列表中添加项目以搜索正确的标题

2024-09-29 19:35:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,我最初从一个CSV文件,并保存到一个列表。csv文件最初是一个excel表,其中包含每个表的数据类别。我有困难试图提取标题和内容连同它在一个有组织的方式。列表如下所示

myLoad =[
['Unit 1000', '', '']
['A1', 'Food', 'Good']
['A3', 'Drink', 'Poor']
['A6', 'Food', '']
['Unit 1001',  '', '']
['A7', 'Cheese', 'Yellow']
['A8', 'Coke', 'Brown] ]

我想让名单看起来像

1000, A1, Food, Good
1000, A3, Drink, Poor
1000, A6, Food, 
1001, A7, Cheese, Yellow
1001, A8, Coke, Brown

虽然我正在比较另一个列表来提取数据,但是我使用regex来查找单元号,但是即使在找到了编号之后,我仍然无法提取列表的其余部分以及与之相关的每个类别号

loadRegex = re.compile(r'\d{4}')

for i, row in enumerate(myLoad):
  thisLoad = loadRegex.search(row[0])
  if thisLoad:
    print thisLoad.group() #which would print each number

在这之后我想不出来 我如何让单元#打印(并最终添加到新的列表),以及每个部分的内容,就好像所有内容都在一起一样

我希望内容是这样的,如果单位#被找到,然后打印每一行,直到下一个单位#被找到,但它必须基于正则表达式,这样我就可以使用相同的正则表达式来比较相同的单位编号到另一个文件


Tags: 文件数据内容列表fooda1unit单位
3条回答

您不需要regex,只需执行以下代码:

myLoad =[
['Unit 1000', '', ''],
['A1', 'Food', 'Good'],
['A3', 'Drink', 'Poor'],
['A6', 'Food', ''],
['Unit 1001',  '', ''],
['A7', 'Cheese', 'Yellow'],
['A8', 'Coke', 'Brown']]
unit = 0
for i in myLoad:
   if 'Unit' not in i[0]:
      print(', '.join([unit,i[0],i[1],i[2]]))
   else:
      unit = i[0].split()[-1]

输出:

1000, A1, Food, Good
1000, A3, Drink, Poor
1000, A6, Food, 
1001, A7, Cheese, Yellow
1001, A8, Coke, Brown

如果你想解决这个问题, 你可以试试这个

df= pd.DataFrame(myLoad)
df.loc[df[1]=='','new']=df[0].str.strip('Unit ')
df['new']=df['new'].fillna(method='ffill')
df=df[['new',0,1,2]]
df=df[df[1]!='']
print df.values

输出:

[['1000' 'A1' 'Food' 'Good']
 ['1000' 'A3' 'Drink' 'Poor']
 ['1000' 'A6' 'Food' '']
 ['1001' 'A7' 'Cheese' 'Yellow']
 ['1001' 'A8' 'Coke' 'Brown']]

说明:

  1. 将列表转换为数据帧

  2. 为单位值创建新列。通过正向填充方法填充NaN值

  3. 提取所需行

我不会在这里使用regex

myLoad =[
    ['Unit 1000', '', ''],
    ['A1', 'Food', 'Good'],
    ['A3', 'Drink', 'Poor'],
    ['A6', 'Food', ''],
    ['Unit 1001',  '', ''],
    ['A7', 'Cheese', 'Yellow'],
    ['A8', 'Coke', 'Brown'] ]

lst = []
for x in myLoad:
    if x[0].startswith('Unit'):
        unit = x[0].split()[1]
        continue   
    lst.extend([[unit] + x])   # or lst.append([unit] + x)

print(lst)

# [['1000', 'A1', 'Food', 'Good'], 
#  ['1000', 'A3', 'Drink', 'Poor'], 
#  ['1000', 'A6', 'Food', ''], 
#  ['1001', 'A7', 'Cheese', 'Yellow'], 
#  ['1001', 'A8', 'Coke', 'Brown']]

相关问题 更多 >

    热门问题