将文件名添加到.csv文件开头的第一列

时间:2018-05-20 22:32:57

标签: python python-3.x csv

我试图添加一个新的"文件名" .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

2 个答案:

答案 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.DictWritercsv.DictReader,它们可用于指定要写/读的字段名称,并具有writeheader功能。这没有任何显着的优势,但使我们的代码更清洁。