python将字符串解析为csv格式

2024-03-28 12:51:36 发布

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

我有一个包含以下格式行的文件

aaa=A;bbb=B;ccc=C

我想把它转换成csv格式,这样公式两边的文字将是列,分号作为行分隔符。我试过这样做

 f = open("aaa.txt", "r")
    with open("ccc.csv", 'w') as csvFile:
        writer = csv.writer(csvFile)
        rows = []
        if f.mode == 'r':
            single = f.readline()
            lns = single.split(";")
            for item in lns:
                rows.append(item.replace("=", ","))
            writer.writerows(rows)
            f.close()
            csvFile.close()

但我将每个字母作为一列,结果如下所示:

a,a,a,",",A
b,b,b,",",B
c,c,c,",",C,"

预期结果应该是

aaa,A
bbb,B
ccc,C

Tags: 文件csvcsvfileclose格式openitemrows
3条回答

以下1行更改对我有效:

rows.append(item.split('='))

而不是现有的代码

rows.append(item.replace("=", ",")).

这样,我就可以创建一个列表列表,作者可以很容易地读取它,这样row列表看起来就像[['aaa', 'A'], ['bbb', 'B'], ['ccc', 'C']],而不是['aaa,A', 'bbb,B', 'ccc,C']

它有助于以交互方式执行命令和打印值,或者在代码中添加调试打印(当一切正常时,这些内容将被删除或注释)。在这里您可以看到rows['aaa,A', 'bbb,B', 'ccc,C'],即3个字符串,而它应该是3个序列。你知道吗

由于字符串是字符的(只读)序列writerows使用每个字符作为字段。你知道吗

因此,您不希望用逗号(,)替换=,而是希望在等号上拆分:

        ...
        for item in lns:
            rows.append(item.split("=", 1))
        ...

但是csv模块需要使用newline=''打开输出文件才能正常运行。你知道吗

所以你应该:

with open("ccc.csv", 'w', newline='') as csvFile:
    ...

只需将字符串逐行写入目标文件:

import os
f = open("aaa.txt", "r")
with open("ccc.csv", 'w') as csvFile:
    single = f.readline()
    lns = single.split(";")
    for item in lns:
        csvFile.write(item.replace("=", ",") + os.linesep)
f.close()

输出为:

aaa,A
bbb,B
ccc,C

相关问题 更多 >