将行拆分为多个变量

2024-09-30 06:17:18 发布

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

下面是我想要分割并存储在变量中的文本。你知道吗

Pppp CCCC TTTT                           MMMMM            SSSSSS Oono.   

1  NIL fL-E 10UU (SPD+), 1000XXXXX (SPD) WEEEEEEEEEEEEE   CATTTTTTTTT   
44 10/100/1000BBBBB Ppppppp OOo E SSSSSS WS-XXXXX-RRRRR+I CATTTTTTTTT
44 10/100/1000BBBBB Ppppppp OOo E SSSSSS WS-XXXXX-RRRRR+I CATTTTTTTTT
44 10/100/1000BBBBB Ppppppp OOo E SSSSSS WS-XXXXX-RRRRR+I CATTTTTTTTT
44 10/100/1000BBBBB Ppppppp OOo E SSSSSS WS-XXXXX-RRRRR+I CATTTTTTTTT
44 10/100/1000BBBBB Ppppppp OOo E SSSSSS WS-XXXXX-RRRRR+I CATTTTTTTTT 

我想把它分开 变量1:-

 Pppp

 1    
 44    
 44    
 44   
 44
 44

变量2:-

CCCC TTTT                              

NIL fL-E 10UU (SPD+), 1000XXXXX (SPD)    
10/100/1000BBBBB Ppppppp OOo E SSSSSS 
10/100/1000BBBBB Ppppppp OOo E SSSSSS 
10/100/1000BBBBB Ppppppp OOo E SSSSSS 
10/100/1000BBBBB Ppppppp OOo E SSSSSS 
10/100/1000BBBBB Ppppppp OOo E SSSSSS

变量3:-

MMMMM            

 WEEEEEEEEEEEEE      
 WS-XXXXX-RRRRR+I 
 WS-XXXXX-RRRRR+I 
 WS-XXXXX-RRRRR+I 
 WS-XXXXX-RRRRR+I 
 WS-XXXXX-RRRRR+I

变量4:-

SSSSSS Oono.

CATTTTTTTTT
CATTTTTTTTT
CATTTTTTTTT
CATTTTTTTTT
CATTTTTTTTT
CATTTTTTTTT

每个变量都应该存储指定的值

我有密码试过:-你知道吗

with open ('sh_module.txt', 'r') as module_info:
    lines = module_info.read().splitlines()[6:]
    for l in lines:
        if not l.isspace():
            storeSplit = ("  ".join(l.split()[1:10]))
            A_of_splitOfstoreSplit , B_of_splitOfstoreSplit = storeSplit.split('W') 
            print (storeSplit)

代码不起作用。:-(

你知道吗注:-该这样写的文本与文本文件中的文本一样。一定要考虑空间。!你知道吗

谢谢你的帮助。!:-)


Tags: 文本wsccccmodulexxxxxspdooopppp
1条回答
网友
1楼 · 发布于 2024-09-30 06:17:18

编辑:回答后找到How to efficiently parse fixed width files?。这个答案是针对您的问题的,dupe展示了使用structs等处理定长文件解析的其他方法


您似乎有一个固定宽度的格式—您可以简单地将每一行拆分为一个列表,然后使用zip将其转换为列。你知道吗

创建文件:

# 3456789012345678901234567890123456789012345678901234567890123456789
t = """
Pppp CCCC TTTT                           MMMMM            SSSSSS Oono.   

1  NIL fL-E 10UU (SPD+), 1000XXXXX (SPD) WEEEEEEEEEEEEE   CATTTTTTTTT   
44 10/100/1000BBBBB Ppppppp OOo E SSSSSS WS-XXXXX-RRRRR+I CATTTTTTTTT
44 10/100/1000BBBBB Ppppppp OOo E SSSSSS WS-XXXXX-RRRRR+I CATTTTTTTTT
44 10/100/1000BBBBB Ppppppp OOo E SSSSSS WS-XXXXX-RRRRR+I CATTTTTTTTT
44 10/100/1000BBBBB Ppppppp OOo E SSSSSS WS-XXXXX-RRRRR+I CATTTTTTTTT
44 10/100/1000BBBBB Ppppppp OOo E SSSSSS WS-XXXXX-RRRRR+I CATTTTTTTTT 
"""

with open ('sh_module.txt', 'w') as module_info:
    module_info.write("header\nheader\nheader\nheader\nheader\nheader\n")
    module_info.write(t)

处理文件:

with open ('sh_module.txt', 'r') as module_info:
    lines = [n.strip() for n in module_info.read().splitlines()[6:]]


data = [] 

# split file-lines into data - special case for line starting with Pppp as its 4 long
for line in lines:
    # ignore empty lines
    if line.strip():
        if line.startswith("Pppp"):  # slightly different fixed width
            data.append( [line[:4].strip(), line[4:41].strip(), 
                          line[41:58].strip(),line[58:].strip()] )
            continue
        linedata = []
        linedata.extend( (line[:3].strip(), line[3:41].strip(), 
                          line[41:58].strip(),line[58:].strip()) )
        data.append(linedata)

# create a dict with variables from the splitted line-list
variabs = {a[0]:[i for i in a[1:]] for a in zip(*data)}

print(variabs)

输出:

{'Pppp': ['1', '44', '44', '44', '44', '44'],
 'CCCC TTTT': ['NIL fL-E 10UU (SPD+), 1000XXXXX (SPD)', '10/100/1000BBBBB Ppppppp OOo E SSSSSS', 
               '10/100/1000BBBBB Ppppppp OOo E SSSSSS', '10/100/1000BBBBB Ppppppp OOo E SSSSSS', 
               '10/100/1000BBBBB Ppppppp OOo E SSSSSS', '10/100/1000BBBBB Ppppppp OOo E SSSSSS'], 
 'MMMMM': ['WEEEEEEEEEEEEE', 'WS-XXXXX-RRRRR+I', 'WS-XXXXX-RRRRR+I', 'WS-XXXXX-RRRRR+I', 
           'WS-XXXXX-RRRRR+I', 'WS-XXXXX-RRRRR+I'], 
 'SSSSSS Oono.': ['CATTTTTTTTT', 'CATTTTTTTTT', 'CATTTTTTTTT', 'CATTTTTTTTT', 'CATTTTTTTTT', 
                  'CATTTTTTTTT']}

您可以通过variabs["Pppp"]variabs["SSSSSS Oono."]等访问这些列


还有其他方法可以处理这个问题,更多信息请参见How to efficiently parse fixed width files?


编辑:使用枚举:

# split file-lines into data - special case for line on idx 0  
for idx, line in enumerate(x.strip() for x in lines if x.strip()):
    if idx == 0:  # slightly different fixed width
        data.append( [line[:4].strip(), line[4:41].strip(), 
                      line[41:58].strip(),line[58:].strip()] )
        continue
    linedata = []
    linedata.extend( (line[:3].strip(), line[3:41].strip(), 
                      line[41:58].strip(),line[58:].strip()) )
    data.append(linedata)

相关问题 更多 >

    热门问题