我试图添加一个新的"文件名" .csv文件开头的列,然后将文件名添加到每行
示例input.csv
Date,Day,Server
2018-5-20,Su,ASA
2018-5-21,Su,ASA
示例输出
Filename,Date,Day,Server
input,2018-5-20,Su,ASA
input,2018-5-21,Su,ASA
使用csv模块将文件名添加到.csv的末尾很容易,但在开头添加新列看起来更加棘手。
感谢任何帮助
到目前为止,我在网上搜索silmilar问题时有以下内容
with open(r'C:\Python\sys_status\output.csv', 'w', newline='') as file_output:
csv_output = csv.writer(file_output)
for fname in glob.glob(r'C:\Python\sys_status\input.csv'):
with open(fname, newline='') as f_input:
csv_input = csv.reader(f_input)
for row in csv_input:
row.insert(0, fname)
csv_output.writerow(row)
使用上面的i无法设置标题名称,而是将文件名的整个路径添加到第一列
C:\Python\input.csv,Date,Day,Server
C:\Python\input.csv,2018-5 -20,Su,ASA
C:\Python\input.csv,2018-5 -21,Su,ASA
答案 0 :(得分:1)
这应该有效
import os.path
import csv
import glob
with open(r'C:\Python\sys_status\output.csv', 'w', newline='') as file_output:
csv_output = csv.writer(file_output)
for fname in glob.glob(r'C:\Python\sys_status\input.csv'):
with open(fname, newline='') as f_input:
csv_input = csv.reader(f_input)
fname = os.path.split(fname).pop()
for i, row in enumerate(csv_input):
if i == 0:
row.insert(0, 'Filename')
else:
row.insert(0, fname)
csv_output.writerow(row)
答案 1 :(得分:1)
第一个row
包含CSV文件的标头。在编写新的csv文件时,应使用第一个writerow
来编写标题。
import csv, glob, os
with open(r'C:\Python\sys_status\output.csv', 'w', newline='') as file_output:
csv_output = csv.writer(file_output)
for fname in glob.glob(r'C:\Python\sys_status\input.csv'):
with open(fname, newline='') as f_input:
csv_input = csv.reader(f_input)
# Header processing
header = csv_input.__next__()
header.insert(0, "filename")
csv_output.writerow(header)
for row in csv_input:
print(row)
row.insert(0, fname)
csv_output.writerow(row)
注意我建议使用csv.DictWriter
和csv.DictReader
,它们可用于指定要写/读的字段名称,并具有writeheader
功能。这没有任何显着的优势,但使我们的代码更清洁。