我不确定json文件是否唯一,但是找不到其他有效的问题/答案。
我的JSON文件如下:
{"UserID": "name1", "Timestamp": "1234"}
{"UserID": "name2", "Timestamp": "4321"}
{"UserID": "name3", "Timestamp": "1234"}
python是否有办法从文件中删除整行?
这是我到目前为止所做的:
open_file = open("times.json", 'r')
line = open_file.readline()
while line:
jsonLine = json.loads(line)
if line['Timestamp'] == '1234':
del line
open_file.close()
如果时间戳为1234,则我希望它删除整个对象,因此文件将如下所示:
{"UserID": "name2", "Timestamp": "4321"}
谢谢!
答案 0 :(得分:1)
如@jonrsharpe所建议,您可以阅读文件。进行所需的任何操作。然后重写文件。
这里是一个例子:
test.out:
test file
#test comment
testfile
Python代码:
content = ''
with open('test.out', 'r') as f:
for line in f:
if line.startswith('#'): continue # don't copy comment lines
content += line
with open('test.out', 'w') as f:
f.write(content)
test.out之后:
test file
testfile
答案 1 :(得分:1)
结合jonrsharpe和ajon的建议,而不是在阅读时将其删除,而是将其读入内存,然后再写回。
但是,您可能有更轻松的时间先阅读json
,然后消除具有匹配元素的行,而不是直接处理文本:
json_lines = []
with open("times.json", 'r') as open_file:
for line in open_file.readlines():
j = json.loads(line)
if not j['Timestamp'] == '1234':
json_lines.append(line)
with open("times.json", 'w') as open_file:
open_file.writelines('\n'.join(json_lines))
与在行中专门搜索"TimeStamp": "1234"
相比,此方法在必要时为您提供了更多的条件灵活性,可以针对多个键/值。
答案 2 :(得分:0)
将整个文件读入内存可能会导致大文件出现问题。您可能要写入一个临时文件,然后用新文件覆盖旧文件。 python库中有一个针对该版本的构建:https://docs.python.org/3/library/tempfile.html
如果确定您的文件不大,则不需要read_line,可以直接使用json.load()
。