Python 通过截断从文件中删除最终字符
我想删除python文本文件中的最后一个逗号。该文件如下所示:Python 通过截断从文件中删除最终字符,python,Python,我想删除python文本文件中的最后一个逗号。该文件如下所示: {"time":"2019-02-12T14:41:25.2424552+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_
{"time":"2019-02-12T14:41:25.2424552+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Alteraciones_Primitivas_dmz_","service":"GetAlteracion","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_85531"},"response":null,"status":200},
{"time":"2019-02-12T14:41:25.5525828+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Expedientes_dmz_","service":"GetObligatoriedadDocumental","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_85531","tipo_alteracion":"ALT_1","id_expediente":""},"response":null,"status":400},
{"time":"2019-02-12T14:41:25.9169746+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Alteraciones_Primitivas_dmz_","service":"Ubicar","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_85531","epsg":"EPSG:4326"},"response":null,"status":200},
{"time":"2019-02-12T14:41:29.8222248+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Alteraciones_Primitivas_dmz_","service":"GetAlteracion","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_17819"},"response":null,"status":200},
{"time":"2019-02-12T14:41:29.9708861+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Expedientes_dmz_","service":"GetObligatoriedadDocumental","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_17819","tipo_alteracion":"ALT_1","id_expediente":""},"response":null,"status":400} ,
{"time":"2019-02-12T14:41:30.3077709+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Alteraciones_Primitivas_dmz_","service":"Ubicar","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_17819","epsg":"EPSG:4326"},"response":null,"status":200},
{"time":"2019-02-12T14:41:38.7145697+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Documentos_dmz_","service":"obtenerDocumento","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_17819","documento":"E000226847","control":11},"response":null,"status":200},
我想去掉最后一行的逗号。在查看了大量示例后,我尝试了以下代码(以及许多类似的选项):
但这不起作用。有什么帮助吗
编辑
逗号和'}
之间没有空格。如果文件以逗号结尾,我们办公室里的程序(我没有访问权限)会给出一个错误。我需要的是只删除文件最后一行中的最后一个逗号,而不是删除每一行中的最后一个逗号,然后以以下方式返回文件:
{"time":"2019-02-12T14:41:25.2424552+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Alteraciones_Primitivas_dmz_","service":"GetAlteracion","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_85531"},"response":null,"status":200},
{"time":"2019-02-12T14:41:25.5525828+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Expedientes_dmz_","service":"GetObligatoriedadDocumental","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_85531","tipo_alteracion":"ALT_1","id_expediente":""},"response":null,"status":400},
{"time":"2019-02-12T14:41:25.9169746+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Alteraciones_Primitivas_dmz_","service":"Ubicar","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_85531","epsg":"EPSG:4326"},"response":null,"status":200},
{"time":"2019-02-12T14:41:29.8222248+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Alteraciones_Primitivas_dmz_","service":"GetAlteracion","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_17819"},"response":null,"status":200},
{"time":"2019-02-12T14:41:29.9708861+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Expedientes_dmz_","service":"GetObligatoriedadDocumental","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_17819","tipo_alteracion":"ALT_1","id_expediente":""},"response":null,"status":400},
{"time":"2019-02-12T14:41:30.3077709+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Alteraciones_Primitivas_dmz_","service":"Ubicar","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_17819","epsg":"EPSG:4326"},"response":null,"status":200},
{"time":"2019-02-12T14:41:38.7145697+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Documentos_dmz_","service":"obtenerDocumento","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_17819","documento":"E000226847","control":11},"response":null,"status":200}
编辑2
最后,解决方案对我有效!:
with open('data.txt', 'ab'):
f.seek(-1, 2)
f.truncate()
使用以下命令:
res = your_string.rstrip(',')
为了
希望能有帮助
谢谢我注意到
,
不是数据中的最后一个符号,这就是为什么您的解决方案以及rstrip(',')
无法工作的原因。使用替换:
with open('data.txt', 'r') as f:
data = f.read().replace('} ,', '}')
with open('data.txt', 'w') as f:
f.write(data)
此脚本删除每行上的最后一个逗号(因为'},
仅出现在每行的末尾),输出时您将看到以下内容:
{"time":"2019-02-12T14:41:25.2424552+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Alteraciones_Primitivas_dmz_","service":"GetAlteracion","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_85531"},"response":null,"status":200}
{"time":"2019-02-12T14:41:25.5525828+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Expedientes_dmz_","service":"GetObligatoriedadDocumental","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_85531","tipo_alteracion":"ALT_1","id_expediente":""},"response":null,"status":400}
{"time":"2019-02-12T14:41:25.9169746+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Alteraciones_Primitivas_dmz_","service":"Ubicar","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_85531","epsg":"EPSG:4326"},"response":null,"status":200}
{"time":"2019-02-12T14:41:29.8222248+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Alteraciones_Primitivas_dmz_","service":"GetAlteracion","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_17819"},"response":null,"status":200}
{"time":"2019-02-12T14:41:29.9708861+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Expedientes_dmz_","service":"GetObligatoriedadDocumental","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_17819","tipo_alteracion":"ALT_1","id_expediente":""},"response":null,"status":400}
{"time":"2019-02-12T14:41:30.3077709+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Alteraciones_Primitivas_dmz_","service":"Ubicar","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_17819","epsg":"EPSG:4326"},"response":null,"status":200}
{"time":"2019-02-12T14:41:38.7145697+01:00","ip":"::1","browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36","user":"28969523B","profile":"SUMUM_D?99?2017?2","controller":"Documentos_dmz_","service":"obtenerDocumento","delegacion":null,"municipio":null,"method":"GET","parameters":{"id_alteracion":"11_31_17819","documento":"E000226847","control":11},"response":null,"status":200}
这个怎么样
rf = open('data.txt').read()
with open('data.txt', 'w') as wf:
wf.write(rf[:-3])
您的代码无法工作,因为在写模式下打开文件会立即将其截断为零长度。您需要附加模式,该模式将使用任何现有文件的内容
忽略一个字节等于一个字符的假设(Unicode进入图片后,情况并非总是如此),并假设文件末尾没有换行符,并且您希望保留空格,这样应该可以:
with open('data.txt', 'ab'):
f.seek(-1, 2)
f.truncate()
此解决方案定位最后一个索引的索引
}
在最后一行中,并将字符串替换为索引
以后可以选择重命名“新”文件
with open("datain.txt", 'r') as f_in, open('dataout.txt', 'w') as f_out:
last = None
for l in f_in.readlines():
if last:
f_out.write(last)
last = l
i = last.rfind("}")
f_out.write(last[:i+1])
您也可以这样做,但是我不知道它如何处理编码,循环可能会受到更多限制,这样您就不会截断整个文件
import os
with open("datain.txt", "r+") as f:
f.seek(0, os.SEEK_END)
pos = f.tell()
while pos > 0:
f.seek(pos)
c = f.read(1).encode('utf-8')
if c == b'}':
break
pos = f.tell() - 2
f.truncate(pos)
可能的重复您是否确定逗号是文件中的最后一个字符,并且没有任何隐藏的内容(例如空格、回车符或换行符(\r或\n))?@liamhawkins您提到的潜在重复假定一个字符=一个字节。这将替换所有逗号?他们特别想删除fileNope中的最后一个逗号。最后一个原因是数据格式(这里唯一的额外空间:},
)对于一个可能解释得更清楚的问题来说是一个有点脆弱的解决方案。每一行都有额外的空间。按住Ctrl+F键,输入字符串},
,您将在每个字符串上看到它。我在这里遗漏了什么?@liamhawkins我已经更新了我的答案,让事情变得更清楚。这是一个很好的解决方案,但只有当逗号是最后一个字符时才有效,我怀疑这里的情况是否如此。问题显然是试图使用文件截断,大概是为了“效率”。此方法创建新文件,而不是缩短现有文件。
import os
with open("datain.txt", "r+") as f:
f.seek(0, os.SEEK_END)
pos = f.tell()
while pos > 0:
f.seek(pos)
c = f.read(1).encode('utf-8')
if c == b'}':
break
pos = f.tell() - 2
f.truncate(pos)