将与print命令相同的内容保存到.csv文件

2024-06-13 03:36:50 发布

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

Print命令显示如下内容(我有3行,但这只是示例的一部分):

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']"]

@Martin Evans你的例子看起来真不错。但我只需要从结果行的一部分,并保存为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])) 

但是我有一个错误:TypeError:列表索引必须是整数,而不是list


Tags: 文件csvoutputenablemodelinemaintenanceresult
1条回答
网友
1楼 · 发布于 2024-06-13 03:36:50

csv库的设计目的是获取列条目列表,并通过添加必要的分隔符将其自动转换为整个csv行。print语句通过在每个列条目之间附加;来模拟这种情况。您可以指定创建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(';'))

在python3.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的示例,因此这是基于您的示例输出。你知道吗

相关问题 更多 >