在Python中,如何在保留原始间距的同时替换文本?

2024-06-08 03:28:29 发布

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

我想使用Python查找和替换某些关键字,同时保留文本文件中的原始间距

因此,我有一个(Fortran)文本文件:

c mat card 4063
m4063    40000.66c 1.296214e+25 $ 1963.563456 g
          1001.80c 2.041536e+25 $ 34.170479 g
mt4063 h/zr.10t zr/h.10t
c
c mat card 4064
m4064    40000.66c 1.292081e+25 $ 1957.303433 g
          1001.80c 2.035028e+25 $ 34.061540 g
mt4064 h/zr.10t zr/h.10t
c
c mat card 4065
m4065    40000.66c 1.283016e+25 $ 1943.571491 g
          1001.80c 2.020751e+25 $ 33.822573 g
mt4065 h/zr.10t zr/h.10t
c

这里是我尝试的Python脚本:

FE_ID = [4064, 4065]
C12_TEMP_DICT = {'10': '40000.66c', '20': '40000.67c', '30': '40000.68c'}
H1_TEMP_DICT  = {'10': ' 1001.80c', '20': ' 1001.81c', '30': ' 1001.82c'}
ZRH_TEMP_DICT   = {'10': 'zr/h.10t', '20': 'zr/h.20t', '30': 'zr/h.30t'}
HZR_TEMP_DICT   = {'10': 'h/zr.10t', '20': 'h/zr.20t', '30': 'h/zr.30t'}

temp = input("Temperature = ")
new_file = open('new_text.i', 'w')
for line in open('matcards.i','r'):
    entries = line.split()
    if entries[0] != 'c':
        if entries[0] in [f'm{f}' for f in FE_ID]:
            for entry in entries:
                if entry in list(C12_TEMP_DICT.values()):
                    entry == C12_TEMP_DICT[temp]
                elif entry in list(H1_TEMP_DICT.values()):
                    entry == H1_TEMP_DICT[temp]
            line = ' '.join(entries)
        elif entries[0] in [f'mt{f}' for f in FE_ID]:
            for entry in entries:
                if entry in list(ZRH_TEMP_DICT.values()): 
                    entry = ZRH_TEMP_DICT[temp]
                if entry in list(HZR_TEMP_DICT.values()):
                    entry = HZR_TEMP_DICT[temp]
            line = ' '.join(entries)
    new_file.write(line)

如何在Python脚本中保留原始文件的间距,就像手动“查找并替换”它一样


Tags: inforiflinecardtempdictlist
1条回答
网友
1楼 · 发布于 2024-06-08 03:28:29

您可以根据需要使用python的str.ljust函数。它基本上用空格或您指定的其他字符填充字符串

FE_ID = [4064, 4065]
C12_TEMP_DICT = {'10': '40000.66c', '20': '40000.67c', '30': '40000.68c'}
H1_TEMP_DICT  = {'10': ' 1001.80c', '20': ' 1001.81c', '30': ' 1001.82c'}
ZRH_TEMP_DICT   = {'10': 'zr/h.10t', '20': 'zr/h.20t', '30': 'zr/h.30t'}
HZR_TEMP_DICT   = {'10': 'h/zr.10t', '20': 'h/zr.20t', '30': 'h/zr.30t'}

def adjust_spaces(data: dict):
    for k, v in data.items():
        modified_k = k.ljust(len(v))
        del data[k]
        data[modified_k] = v

adjust_spaces(C12_TEMP_DICT)
adjust_spaces(H1_TEMP_DICT)
adjust_spaces(ZRH_TEMP_DICT)
adjust_spaces(HZR_TEMP_DICT)

temp = input("Temperature = ")
new_file = open('new_text.i', 'w')
for line in open('matcards.i','r'):
    entries = line.split()
    if entries[0] != 'c':
        if entries[0] in [f'm{f}' for f in FE_ID]:
            for entry in entries:
                if entry in list(C12_TEMP_DICT.values()):
                    entry == C12_TEMP_DICT[temp]
                elif entry in list(H1_TEMP_DICT.values()):
                    entry == H1_TEMP_DICT[temp]
            line = ' '.join(entries)
        elif entries[0] in [f'mt{f}' for f in FE_ID]:
            for entry in entries:
                if entry in list(ZRH_TEMP_DICT.values()): 
                    entry = ZRH_TEMP_DICT[temp]
                if entry in list(HZR_TEMP_DICT.values()):
                    entry = HZR_TEMP_DICT[temp]
            line = ' '.join(entries)
    new_file.write(line)

相关问题 更多 >

    热门问题