【问题标题】:Conditional list Python条件列表 Python
【发布时间】:2020-11-11 18:09:03
【问题描述】:

我打开 zip 中存在的所有文件,然后将字符串转换为 List,然后将列表分成每行 5 个元素。

我的代码:

with zipfile.ZipFile(dummy.zip, 'r') as mz:
    for f in mz.namelist():
        data = mz.read(f).decode('utf-8').replace("\n", '').replace("\r", ',').lstrip().rstrip().split(",") #Removing all spaces and \r from text.
        allist = [data[i:i + 5] for i in range(len(data))[::5]] #breaking list into 5 elements each

如果所有值都存在,我可以完美地做到这一点,但是如果特定行中缺少任何元素,那么它会从第二行获取值,但我想在缺少元素的位置添加 NA。

文件数据: Dummy.zip = "File1 + File2"

文件 1:

Yuli, yu@test.com, 0001, 8902
Su, su@test.com, 0002, 8903, Manager

文件:2

Zaon, zn@test.com, 100, 9087, Analyst
June, ju@test.com, 278, 6078

代码用途:

我正在添加将此列表转换为dict,因此将每个条目的键添加为name, email, ext, Empid, Level

【问题讨论】:

  • 将文件内容分成几行,然后循环遍历这些行,而不是将整个文件视为一个平面列表。
  • @barmar 感谢您的建议,我尝试这样做,但迷失在代码中。有什么建议吗?
  • with mz.open(f) as file: 然后像处理普通文件一样处理它。你甚至可以使用csv 模块来解析它。
  • 你可以使用readline()或for line in file:等函数

标签: python arrays python-3.x list formatting


【解决方案1】:

你可以这样做:

texts = [b"Yuli, yu@test.com, 0001, 8902\r\nSu, su@test.com, 0002, 8903, Manager",
         b"Zaon, zn@test.com, 100, 9087, Analyst\r\nJune, ju@test.com, 278, 6078"]

result =[]
keys = "name,email,ext,Empid,Level".split(",")
# you do: 
# with zipfile.ZipFile(dummy.zip, 'r') as mz: 
#     for f in mz.namelist(): 
#         t = mz.read(f) here instead
# instead
for t in texts:
    for line in t.decode("utf-8").split("\n"):
        d = {k:"NA" for k in keys} # init all keys with NA
        # update with actual values
        d.update(zip(keys,(l.strip() for l in line.strip().split(","))))
        # add to result list
        result.append(d) 
print(result)

输出:

[{'name': 'Yuli', 'email': 'yu@test.com', 'ext': '0001', 'Empid': '8902', 'Level': 'NA'}, 
 {'name': 'Su', 'email': 'su@test.com', 'ext': '0002', 'Empid': '8903', 'Level': 'Manager'},
 {'name': 'Zaon', 'email': 'zn@test.com', 'ext': '100', 'Empid': '9087', 'Level': 'Analyst'}, 
 {'name': 'June', 'email': 'ju@test.com', 'ext': '278', 'Empid': '6078', 'Level': 'NA'}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 2022-12-12
    • 2022-10-23
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多