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
我有一个文本文件,其中有这样一行 -
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