簡體   English   中英

python將字符串解析為csv格式

[英]python parsing string to csv format

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

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

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)

只需將字符串逐行寫入目標文件:

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

它有助於以交互方式執行命令並打印值,或在代碼中添加調試打印(當一切正常時將被刪除或注釋)。 在這里你可以看到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:
    ...

以下1行更改對我有用:

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

而不是現有的代碼

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

這樣,我就可以創建一個列表,列表可以很容易地被作者讀取,這樣row列表看起來像[['aaa', 'A'], ['bbb', 'B'], ['ccc', 'C']]而不是['aaa,A', 'bbb,B', 'ccc,C']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM