用Python使用namedtuple将txt转换为JSON



我正在尝试转换txt

import json
import collections
def main():
file = open("file.txt")
#structure the output using namedtuple
UserBase = collections.namedtuple(
"UserBase",
[
"UserID",
"UserName",
"UserLastName",
"UserLocation",
"UserType",
],
)
#parse lines into a list
n = [line.strip().split(',') for line in file.readlines()]
#prepare list to output
UserList = [UserBase(*entry) for entry in n]
#output the conversion
with open("database.json", "w") as output:
json.dump([ob._asdict() for ob in UserList[:10]], output)

错误发生在:

UserList = [UserBase(*entry) for entry in n]
TypeError: <lambda>() missing 1 required positional argument: 'UserType'

我想知道是否我使用星号/*(*)操作符是不正确的,或者如果我错过了别的东西。

编辑:输入是一个已经处理过的TXT文件

48655916,AGUILAR,FERNANDEZ,AMAZONAS,REGULAR
33783735,AGUILAR,LEONCIO,AMAZONAS,REGULAR
33407339,AGUILAR,ROJAS,AMAZONAS,REGULAR
48546141,ALFARO,CASTRO,AMAZONAS,REGULAR
...

当打印"n"中的第一个元素时,输出如下:

['48655916', 'AGUILAR', 'FERNANDEZ', 'AMAZONAS',  'REGULAR']

既然您的输入是CSV,那么使用csv模块不是更简单吗?它的DictReader似乎很适合这项任务。

import csv
import json
csv_header = "UserID,UserName,UserLastName,UserLocation,UserType".split(",")
with open("file.txt", encoding='utf8', newline='') as file:
users = csv.DictReader(file, delimiter=',', fieldnames=csv_header)

with open("database.json", "w") as output:
json.dump(list(users), output)

最新更新