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()
1条答案
按热度按时间hc8w905p1#
对字段名使用列表或元组,而不是集合。集合未排序。