现有代码
import json
filename = 'thunar-volman/debian/control'
dict1 = {}
with open(filename) as fh:
for line in fh:
print(line)
command, description = line.strip().split(': ')
print(command)
print(description)
dict1[command.strip()] = description.strip()
with open("test.json", "w") as out_file:
json.dump(dict1, out_file, indent=4, sort_keys = False)
字符串
错误类型
Build-Depends
debhelper-compat (= 13),
intltool,
Traceback (most recent call last):
File "read.py", line 7, in <module>
command, description = line.strip().split(': ')
ValueError: not enough values to unpack (expected 2, got 1)
型
我打算处理成json的文本文件在这里-https://salsa.debian.org/xfce-team/goodies/thunar-volman/-/blob/debian/master/debian/control
如何处理内容,使Build-Depends
冒号后面的内容作为Build-Depends
command
的description
进行处理。
任何帮助将非常感谢,因为我是一个新的JSON。
6条答案
按热度按时间kx7yvsdv1#
你的问题很简单,我在不到五分钟的时间里就为它写了工作代码,一气呵成。
您有一些表示Map的行,这些行可以包含冒号,包含冒号的行表示新键值对的开始。
键位于冒号的左侧,值可以跨多行。
我们可以分配一个名为
key
的变量,将其初始化为None
。然后,我们循环遍历这些行,对于每一行,如果我们找到一个冒号并且第一个字符不是空格,那么我们就找到了一个新的键值对。如果key不是
None
,我们将之前的键值对添加到字典中。然后,我们设置要记住的当前键值对,并在以后的迭代中使用它们。然后,如果该行不是空的,也不是一个新对的开始,它是前一个值的延续,我们把它加到前一个值上。
这样我们就可以正确地处理所有项目,但我们会错过最后一个项目。
我们可以稍后添加它。
代码:
个字符
neekobn82#
你可以使用
re
(text
包含你的问题中的字符串)(regex101):字符串
印刷品:
型
axkjgtzd3#
你的档案是yaml
要使用yaml文件,您需要库ruamel.yaml
安装
字符串
加载文件并转换为json编写json
型
bpsygsoo4#
使用
maxsplit
或Python String split() Method。字符串
产出:
型
hmmo2u0o5#
你可以这样做:
字符串
因此,基本上,如果在开始处有一个白色,那么它将在前一个命令中追加新项。
7rfyedvj6#
打开文件并逐行读取。忽略空行。在冒号上拆分,检查标记的数量。确保输入数据的完整性
字符串
输出:
型