以表格形式在csv中编写的python代码

2024-10-04 01:24:12 发布

您现在位置:Python中文网/ 问答频道 /正文

[('01', ['name abc', 'age 32', 'address addr123']), ('02', ['name def', 'age 22', 'address addr456'])]

我想这个名单是写在CSV文件在下面的格式。某些时间列表可能包含更多价值观。所以呢没有硬编码。 表格格式的csv预期输出

id   name  age   address
01   abc   32    addr123
02   def   22    addr456

Tags: 文件csvname编码列表ageaddressdef
3条回答

或者,您可以使用pandas,它肯定可以处理不同的行长度,例如:

import pandas as pd

data = [('01', ['name abc', 'age 32', 'address addr123']),
        ('02', ['name def', 'age 22'])] # example of a shorter row



df = pd.DataFrame.from_dict({i:{a.split()[0]:a.split()[1] for a in j} for i,j in data},
            orient='index')

df.to_csv('filename.csv')

编辑:假设你的值中没有空格

('01', ['name ghi jkl', 'age 42', 'address addr123'])

但我认为目前所有的答案都是这样。你知道吗

import csv

data = [('01', ['name abc', 'age 32', 'address addr123']), ('02', ['name def', 'age 22', 'address addr456 789'])]

with open(path_to_csv, 'w') as csv_file:
    writer = csv.DictWriter(csv_file, 'id name age address'.split())
    writer.writeheader()
    for row_id, rest in data:
        row = {'id': row_id}
        for item in rest:
            key, value = item.split(' ', maxsplit=1)
            row[key] = value
        writer.writerow(row)

假设列名将被排序。例如名称总是出现在列的第一位。下面的代码可以正常工作。你也不需要任何额外的图书馆。你知道吗

arr = [('01', ['name abc', 'age 32', 'address addr123']), ('02', ['name def', 'age 22', 'address addr456'])]
columnName = ["id"]
output = []
for l in arr:
    ID = l[0]
    val = l[1]
    line = str(ID) + '\t'
    for x in val:
        y = x.split(' ')
        if y[0] not in columnName:
            columnName.append(y[0])
        line += str(y[1]) + '\t'
    line += '\n'
    output.append(line)

colLine = ''
for i in columnName:
    colLine += str(i) + '\t'
colLine += '\n'
output = [colLine] + output
f = open("output.csv", 'w')
for x in output:
    f.write(x)
f.close()

相关问题 更多 >