在Python中分割一行(固定大小的块)并识别相邻单词

问题描述 投票:0回答:1

想分割线以下

*SECTION_TSHELL
$#   secid    elform      shrf       nip     propt   qr/irid     icomp    tshear
         1         2       0.0         5         0       0.0
*MAT_ELASTIC
$#     mid        ro         e        pr        da        db  not used
     Steel  8000.0002.0000e+11  0.300000       0.0       0.0       0.0

文件的格式是这样的:每个 pid、secid 等一遍又一遍地占用 10 个空格。 上面的例子

第 1 步:选择时,粗体字母需要 10 个($# mid)个空格。想要使用特定数量的空格来分割一行。 步骤2:分裂后,需要识别相邻值。

import os

ModelPath = 'D:\pyLearning\Read_all_files'

k_files = os.listdir(ModelPath)

if k_files:

    include_file = "_K3_Controls.k"

    include_file_path = os.path.join(ModelPath, include_file)

    with open(include_file_path, 'r') as include_kfile:
        parts = include_kfile.read()
        print("TestEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEnd")

        for lines in parts:
            if not lines.startswith('$#'):
                # parts = lines.split()
                length = 10
                splits = [parts[i:i + length] for i in range(0, len(parts), length)]
                # print("Worked", splits)
                try:
                    i = splits.index("Steel")
                    next_word = splits[i + 1]
                    print(f"Steel = {next_word}")
                except(ValueError, IndexError):
                    pass

print("finished")

期望输出有点像这样 工作过 ['钢铁', '8000.000', '2.0000e+11', '0.300000']

最后

钢铁 = 8000.000

提前致谢

python split
1个回答
0
投票

您需要将文件分成几行。你可以只使用

for lines in include_kfile:

当你创建

splits
时,你应该切片
lines
,而不是
parts

splits = [lines[i:i + length] for i in range(0, len(lines), length)]

当您搜索

splits
时,您没有考虑到
Steel
中每个项目的前导空格。分手的时候可以把它们脱掉。

splits = [lines[i:i + length].strip() for i in range(0, len(lines), length)]

放在一起:

with open(include_file_path, 'r') as include_kfile:
    for lines in include_kfile:
        if not lines.startswith('$#'):
            # parts = lines.split()
            length = 10
            splits = [lines[i:i + length].strip() for i in range(0, len(lines), length)]
            #print("Worked", splits)
            try:
                i = splits.index("Steel")
                next_word = splits[i + 1]
                print(f"Steel = {next_word}")
            except(ValueError, IndexError):
                pass
© www.soinside.com 2019 - 2024. All rights reserved.