我試圖從日誌文件中刪除特殊字符。這是兩個示例行:刪除Python中的特殊字符
2016.04.03 23:54:28.257;:;213.210.213.316;:;PDL3_SGW2;:;5F6DBA-093E-0D4D9C-00000001-01;:;userId;:;;:;1000;:;http://live.skysat.tv/cmdc/services?region=253&lang=swe&count=250&sort=%2blogicalChannelNumber;:;101;:;0;:;250;:;;:;
2016.04.03 23:54:28.258;:;781.69.243.363;:;PDL3_SGW2;:;;:;userId;:;;:;1001;:;http://live.skysat.tv/cmdc/services?region=253&lang=swe&count=250&sort=%2blogicalChannelNumber;:;101;:;0;:;1;:;0x40001;:;Invalid credentials
這除去特殊字符之後的輸出:
2016.04.03 23 54 48.957 213.210.213.316 PDL3_SGW2 5F6DB03A 093E 0D414D9C 1 1 userId 1000 http live.skysat.tv cmdc services region 25351 lang swe count 250 sort 2blogicalChannelNumber 101 0 250
2016.04.03 23 54 48.958 781.69.243.363 PDL3_SGW2 userId 1001 http live.skysat.tv cmdc services region 25351 lang swe count 250 sort 2blogicalChannelNumber 101 0 1 0xDC40001 Invalid credentials
正如在輸出中的第二行中看到的,「用戶id」位於下柱[6 ]而不是專欄[11]。由於日誌文件中的列[06]到列[10]的數據丟失。我想處理這個問題並寫出所有列,即使日誌文件中沒有數據。
輸出應該如下:
2016.04.03 23 54 48.957 213.210.213.316 PDL3_SGW2 5F6DB03A 093E 0D414D9C 1 1 userId 1000 http live.skysat.tv cmdc services region 25351 lang swe count 250 sort 2blogicalChannelNumber 101 0 250
2016.04.03 23 54 48.958 781.69.243.363 PDL3_SGW2 userId 1001 http live.skysat.tv cmdc services region 25351 lang swe count 250 sort 2blogicalChannelNumber 101 0 1 0xDC40001 Invalid credentials
這是我的部分代碼:
new_str = re.sub(r'[- - [ "/: ; & ? = % ~ + \n \]]', ' ', line)
text = new_str.rstrip().split()
writer.writerow(text)
看來您正在使用';:'作爲列分隔符。如果是這樣,你應該使用'split()'將字符串分隔成字段,然後使用'str.join()'或'str.format()'來格式化你的輸出。 –
@AustinHastings,您的反饋非常感謝。我不使用;:;作爲分隔符,因爲文件中沒有特定的分隔符。我從頭開始構建整個字符串。這就是爲什麼我使用re.sub替換''的所有特殊字符,然後拆分它。 –