条件列表Python
我打开zip中存在的所有文件,然后将字符串转换为列表,然后将列表从每行分解为5个元素 我的代码:条件列表Python,python,arrays,python-3.x,list,formatting,Python,Arrays,Python 3.x,List,Formatting,我打开zip中存在的所有文件,然后将字符串转换为列表,然后将列表从每行分解为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("
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
Yuli, yu@test.com, 0001, 8902
Su, su@test.com, 0002, 8903, Manager
如果所有的值都存在的话,我可以做得很好,但是如果在特定的行中缺少任何元素,那么它会从第二行中拾取值,但是我想在缺少元素的位置添加NA
文件数据:
Dummy.zip=“File1+File2”
文件1:
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
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
代码的目的:
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
Yuli, yu@test.com, 0001, 8902
Su, su@test.com, 0002, 8903, Manager
我正在添加将此列表转换为dict,因此在每个条目中添加键,如姓名、电子邮件、分机、Empid、级别您可以这样做:
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'}]
将文件内容拆分为几行,然后在这些行上循环,而不是将整个文件视为一个简单的列表。@barmar感谢您的建议,我尝试过这样做,但在代码中迷失了方向。有什么建议吗?
使用mz.open(f)作为文件:
然后像处理普通文件一样处理它。您甚至可以使用csv
模块来解析它。然后您可以使用readline()
或等函数来解析文件中的行: