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

Python: Modifying text file, deleting substring

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

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(index of 'double \':index of '\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

在这里使用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 字符串中的表示方式。

如果您不想导入任何内容,请使用此

    f = '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'

    s= ('\CAN-Monitoring:1','\CCP:1')
    for i in s:
        f=f.replace(i, '')

   print(f)

time    time    B2CAT_INLET_T   B1CAT_MIDBED_T  B1CAT_INLET_T   B1CAT_OUTLET_T  time    APEPFRPP    KDFILRAW