2016-04-25 83 views
1
顯示我是這樣的(我有更多的爲3行,但是這僅僅是示例的一部分)

打印命令:保存了相同的內容.csv文件打印命令

O;4;Line[63];CPUA.DB1610.4122,X1;RW 
V;5;Enable_maintenance_mode;; 
V;5;Maintenance_start_motor;CPUA.DB1610.4124,X0;RW 
O;4;Line[64];CPUA.DB1610.4124,X1;RW 

我想保存csv文件上的內容相同,但在csv上我只有一行和這種格式。問題是,如何保存到csv文件保存打印顯示?

O,;,4,;,L,i,n,e,[,6,4,],;,C,P,U,A,.,D,B,1,6,1,0,.,4,1,2,4,|,|,X,1,;,R,W 

他們救了我只有一排的CSV文件

這是我的代碼:

for i in range((len(result)-1)): 
print(str(result[i][0]) + ';' + str(result[i][1]) + ';' + result[i][2] + ';' + str(adress[i])) 
with open(source_file[:-4] + '_test.csv', "w") as f: 
    writer = csv.writer(f) 
    writer.writerow(str(result[i][0]) + ';' + str(result[i][1]) + ';' + result[i][2] + ';' + str(adress[i])) 

我不知道我做錯了。有人可以幫我解決這個問題嗎?

結果包含:

['V', '5', 'Enable_maintenance_mode', "S7:[CPUA]DB1610', 'X4124.0", 'B', 'RW', '0', "0']"] 
['V', '5', 'Maintenance_start_motor', "S7:[CPUA]DB1610', 'X4124.1", 'B', 'RW', '0', "0']"] 
['O', '4', 'Line[64]', '', '', "']"] 
['V', '5', 'Enable_maintenance_mode', "S7:[CPUA]DB1610', 'X4126.0", 'B', 'RW', '0', "0']"] 

@馬丁·埃文斯你的榜樣看起來非常好。但我只需要結果的一部分並保存爲csv。 我可以這樣想嗎?

csv_output = csv.writer(f_output, lineterminator='\n') 
for line in result: 
#csv_output.writerow(line) 
csv_output.writerow(str(result[line][0]) + ';' + str(result[line][1]) + ';' + result[line][2] + ';' + str(adress[line])) 

但我有錯誤:類型錯誤:列表索引必須是整數,而不是列出了加入

+0

什麼是結果? – 2016-04-25 07:31:48

+1

我更新了我的問題包含哪些結果。 – Luk

+0

'result'是一個字符串還是一個列表列表? – 2016-04-25 07:46:46

回答

2

的CSV庫旨在採取列條目列表,並自動將其轉換成一個整體CSV行必要的分隔符爲你。您的打印語句通過在每個列條目之間附加;來模擬此操作。您可以指定創建csv.writer時使用的分隔符,在你的例子,這是;

import csv 

result = [ 
    ['V', '5', 'Enable_maintenance_mode', "S7:[CPUA]DB1610', 'X4124.0", 'B', 'RW', '0', "0']"], 
    ['V', '5', 'Maintenance_start_motor', "S7:[CPUA]DB1610', 'X4124.1", 'B', 'RW', '0', "0']"], 
    ['O', '4', 'Line[64]', '', '', "']"], 
    ['V', '5', 'Enable_maintenance_mode', "S7:[CPUA]DB1610', 'X4126.0", 'B', 'RW', '0', "0']"]] 

address = [ 
    "CPUA.DB1610.4122,X1;RW", 
    "", 
    "CPUA.DB1610.4124,X0;RW", 
    "CPUA.DB1610.4124,X1;RW"] 

with open('output.csv', 'w', newline='') as f_output: 
    csv_output = csv.writer(f_output, delimiter=';') 

    for r, a in zip(result, address): 
     csv_output.writerow(r[0:3] + a.split(';')) 

當使用Python 3.x都有一個csv.writer(),你應該總是打開該文件w,並設置newline=''。在不使用range()和索引的情況下,直接遍歷result條目也更容易。由於您似乎有兩個相等長度的列表,因此您可以使用zip爲每個迭代中的元素提供一個元素。

V;5;Enable_maintenance_mode;CPUA.DB1610.4122,X1;RW 
V;5;Maintenance_start_motor; 
O;4;Line[64];CPUA.DB1610.4124,X0;RW 
V;5;Enable_maintenance_mode;CPUA.DB1610.4124,X1;RW 

注意,你有沒有爲address提供了一個示例所以這是基於您的示例輸出:

如下這會給你的輸出文件。

+0

而不是手動嘗試添加分隔符,最好只創建所需的列表。 –

+0

你的例子意味着你正在嘗試顯示前兩個條目,然後再次顯示整行? –

+0

我已更新我的問題。 – Luk