Python;将数据写入CSV不一致地按fieldname排序

ngynwnxp  于 2023-09-28  发布在  Python
关注(0)|答案(1)|浏览(121)

Python 3.11.4
我正在尝试将数据写入一个包含5个字段名的csv文件。将数据写入csv时,数据不会始终进入正确的字段。下表有助于直观地了解问题。
| DriveLetter| DriveSpace|
| --|--|
| 350GB| C|
| C| 350GB|

class CSVWriter:
    def __init__(self, filename, fieldnames):
        self.filename = filename
        self.fieldnames = fieldnames
        self.file_exists = os.path.exists(self.filename)
        
        if not self.file_exists:
            self.file = open(self.filename, 'w', newline='')
            self.writer = csv.DictWriter(self.file, fieldnames=fieldnames)
            self.writer.writeheader()
        else:
            self.file = open(self.filename, 'a', newline='')
            self.writer = csv.DictWriter(self.file, fieldnames=fieldnames)

    def write_row(self, data):
        ordered_data = {key: data[key] for key in self.fieldnames}
        self.writer.writerow(ordered_data)

    def close(self):
        self.file.close()

这是用于写入csv的类。我试图让列匹配的事情是在write_row函数中添加ordered_data变量。从我发现的情况来看,CSV.DictWriter应该按字段名保持顺序。
数据字典顺序与字段名的顺序匹配。如果你能帮忙的话,我将不胜感激。
传入write_row()的数据示例:

fieldnames = {'Date', 
          'DriveLetter', 
          'FreeSpace', 
          'TotalSpace', 
          'PercentFree'}

csv_write = CSVWriter(filename=csv_path, fieldnames=fieldnames)

drive_info = {'Date': now,
        'DriveLetter': driveLetter, 
        'FreeSpace': freeSpace, 
        'TotalSpace': totalSpace, 
        'PercentFree': percentFree
        }

csv_write.write_row(drive_info)


csv_write.close()
hc8w905p

hc8w905p1#

对字段名使用列表或元组,而不是集合。集合未排序。

相关问题