如何在Python中只写一次标题

问题描述 投票:0回答:3

我对编程非常陌生,如何才能只写一次标题,但重复写其他值,我不确定使用什么术语来描述这一点,所以我将向您展示我的意思:

toWriteHeader = [
    ["Timestamp:", "Overall result:","Blank", "Soll-orderno:", "Desired-HW-Version:", "Desired-SF-Version:","Desired-productcode:", "Desired-device-type:", "Scancode:", "Wbm-orderno:", "Wbm-HW-Version:", "Wbm-SF-Version:",
      "Wbm-mac-address:","combined-product-code:", "wbm-device-type:"],
      
    
]   
toWrite = [
    [now ,"Blank",d_ordernum,d_hw_version,d_sf_version,pc_praefix,d_dev_typ,scancode_string,ord_nmr,ord_nmr,v,b]

] 

file = open('Test.csv', 'w') 

with file:
    writer = csv.writer(file)

    for row in toWriteHeader:
        writer.writerow(row)

file = open('Test.csv', 'a') 

with file:
    writer = csv.writer(file)

    for row in toWrite:
        writer.writerow(row)

所以基本上“writeToHeader”只需要写入一次,但其他值需要重复附加,但这种情况不会发生,我只写入“toWrite”一次

任何人都可以建议安迪解决方案或给我举个例子吗? PS:对我放轻松,我是初学者

文件输出示例:

Timestamp:, Overall result:,Soll-orderno:,Desired-HW-Version:,Desired-SF-Version:,Desired-productcode:,Desired-device-type:,Scancode:,Wbm-orderno:,Wbm-HW-Version:,Wbm-SF-Version:,Wbm-mac-address:,combined-product-code:,wbm-device-type:

2021-04-26 13:32:11,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0

2021-04-26 13:32:32,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0

2021-04-26 13:32:38,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0

2021-04-26 13:33:48,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0

2021-04-26 13:33:55,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0

我当前的文件输出:

Timestamp:, Overall result:,Soll-orderno:,Desired-HW-Version:,Desired-SF-Version:,Desired-productcode:,Desired-device-type:,Scancode:,Wbm-orderno:,Wbm-HW-Version:,Wbm-SF-Version:,Wbm-mac-address:,combined-product-code:,wbm-device-type:

2021-04-26 13:32:11,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
python python-3.x append
3个回答
2
投票

这样的东西有帮助吗?


import csv

toWriteHeader = [
    ["Timestamp:", "Overall result:","Blank", "Soll-orderno:", "Desired-HW-Version:", "Desired-SF-Version:","Desired-productcode:", "Desired-device-type:", "Scancode:", "Wbm-orderno:", "Wbm-HW-Version:", "Wbm-SF-Version:",
      "Wbm-mac-address:","combined-product-code:", "wbm-device-type:"],
      
    
]   
toWrite = [
    ['now' ,"Blank",'d_ordernum','d_hw_version','d_sf_version','pc_praefix','d_dev_typ','scancode_string','ord_nmr','ord_nmr','v','b']

] 

with open('Test.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(toWriteHeader)
    for row in range(10):
        writer.writerows(toWrite)

您需要将

toWrite
值调整回变量和
for row
部分..但这会在 csv 中放置一个“标题”,然后放置数据行。


1
投票

我假设您想多次运行该程序并且“toWrite”列表中的值发生变化?

如果是这样,你的问题是你总是执行该部分:

file = open('Test.csv', 'w') 

with file:
    writer = csv.writer(file)

    for row in toWriteHeader:
        writer.writerow(row)

因此,您以“w”模式打开文件,这会覆盖现有内容。 只需在写入标头之前检查文件是否存在即可。另外,最好将文件作为上下文管理器的一部分打开(with),以便随后自动关闭:

import os.path

fname = 'HERE SHOULD BE THE FULL PATH OF THE FILE'

if (not os.path.isfile(fname)):
    with open(fname, 'w') as file:
        writer = csv.writer(file)

        for row in toWriteHeader:
            writer.writerow(row)

您必须先在fname中定义文件的完整路径,或者先更改为文件的目录。

此解决方案假设您第一次运行代码来写入标头时该文件不存在。如果它可能已经存在但可能为空,您可以检查它是否为空: 如何检查.xls和.csv文件是否为空


0
投票

我也是编程新手,我理解你的问题。我找不到好的解决方案,所以这是我发现解决此问题的最佳方法。

首先我尝试读取文件。如果没有文件,则会给出 FilenotfoundError。只有这样它才会创建文件并写入标题

        try:
            with open("foo.csv", "r") as csvfile:
                reader = csv.DictReader(csvfile)

        except FileNotFoundError:
            with open("foo.csv", "w", newline='') as csvfile:
                writer = csv.DictWriter(csvfile, fieldnames= fieldnames)
                writer.writeheader()
        with open("foo.csv", "a", newline='') as csvfile:
            fieldnames = fieldnames
            etc...

所以尝试将使它第一次写入标头,之后它不会在每次添加到文件时添加它。希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.