[英]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.