Python:修改文本文件,删除子字符串

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

我有一个文本文件,其中有这样的一行-

time    time    B2CAT_INLET_T\CAN-Monitoring:1  B1CAT_MIDBED_T\CAN-Monitoring:1 B1CAT_INLET_T\CAN-Monitoring:1  B1CAT_OUTLET_T\CAN-Monitoring:1 time    APEPFRPP\CCP:1  KDFILRAW\CCP:1  

当我使用阅读时

lines = txtfile.readlines()

我得到线=

'time\ttime\tB2CAT_INLET_T\\CAN-Monitoring:1\tB1CAT_MIDBED_T\\CAN-Monitoring:1\tB1CAT_INLET_T\\CAN-Monitoring:1\tB1CAT_OUTLET_T\\CAN-Monitoring:1\ttime\tAPEPFRPP\\CCP:1\tKDFILRAW\\CCP:1\t\t'

因此'\'显示为'double \',而标签显示为'\ t'

由此,我想删除'\ CAN-Monitoring:1'和'\ CCP:1'的所有实例,并按原样保留选项卡。

我有一个代码遍历'lines'的每个元素并获取每个'double \'和'\ t'的索引

然后我尝试使用lines.replace('double \'的索引:'\ t'的索引,'')

但是这似乎没有我想要的效果。

到目前为止是我的代码:

# Reading from text file

    txtfile = open('filename.txt', 'r')
    lines = txtfile.readlines()
    textToModify = lines

# This gives indices of all '\\' and '\t'

doubleslash = []
tab = []

for i, item in enumerate(textToModify):
    if textToModify[i] == '\\':
        doubleslash.append(i)

for i, item in enumerate(textToModify):
    if textToModify[i] == '\t':
        tab.append(i)


# Should find text beginning with '\\' until '\t' only

itemSlashBegin = []
itemTabBegin = []

for itemSlash in doubleslash:
    for itemTab in tab:
        if itemSlash < itemTab:
            break
    itemSlashBegin.append(itemSlash)
    itemTabBegin.append(itemTab)

# Trying to replace '\\'text'\t' in the original text

for i,item in enumerate(itemSlashBegin):
    ModifiedTxt = textToModify.replace([item:itemTabBegin[i]],"")

我确信还有一种更优雅的方法;但我找不到它。

[请给我一些解决方案。

谢谢

R

python replace text-files
1个回答
0
投票

只需在此处使用re.sub

out = re.sub(r'\\CAN-Monitoring:1|\\CCP:1', '', inp)
print(out)

此打印:

time    time    B2CAT_INLET_T   B1CAT_MIDBED_T  B1CAT_INLET_T   B1CAT_OUTLET_T  time    APEPFRPP    KDFILRAW

请注意,双反斜杠和\t只是如何在Python字符串中表示文字反斜杠和制表符。

© www.soinside.com 2019 - 2024. All rights reserved.