python将字符串解析为csv格式

时间:2019-04-26 15:13:34

标签: 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

4 个答案:

答案 0 :(得分:0)

writer.writerows()的参数必须是行的可迭代行,该行又应是字符串或数字的可迭代行。由于将字符串列表传递给它,因此字符串中的字符被视为单独的字段。您可以通过先在';'上然后在'='上分割行来获得正确的行列表:

import csv

with open('in.txt') as in_file, open('out.csv', 'w') as out_file:
    writer = csv.writer(out_file)
    line = next(in_file).rstrip('\n')
    rows = [item.split('=') for item in line.split(';')]
    writer.writerows(rows)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

它有助于交互式地执行命令并打印值,或在代码中添加调试打印(一切正常后将被删除或注释)。在这里您可能已经看到rows['aaa,A', 'bbb,B', 'ccc,C'],当它应该是三个序列时,它是3个字符串。

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

因此,您不想将=替换为逗号(,),而是想等号分割:

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

但是csv模块需要正确操作才能使用newline=''打开输出文件。

所以您应该拥有:

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

答案 3 :(得分:0)

以下1行更改对我有用:

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

代替现有代码

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

这样,我能够创建一个列表列表,以便于编写者轻松阅读,从而使row列表看起来像[['aaa', 'A'], ['bbb', 'B'], ['ccc', 'C']]而不是['aaa,A', 'bbb,B', 'ccc,C']