首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文件名添加到.csv文件开头的第一列

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

Stack Overflow用户
提问于 2018-05-20 22:32:57
回答 2查看 1.3K关注 0票数 2

我试图在.csv文件的开头添加一个新的“文件名”列,然后将该文件的名称添加到每一行

示例input.csv

代码语言:javascript
复制
Date,Day,Server
2018-5-20,Su,ASA
2018-5-21,Su,ASA

示例输出

代码语言:javascript
复制
Filename,Date,Day,Server
input,2018-5-20,Su,ASA
input,2018-5-21,Su,ASA

使用csv模块将文件名添加到.csv的末尾看起来很容易,但是在开始时添加一个新列看起来更棘手。

任何帮助都是非常感谢的。

到目前为止,我从网上搜索silmilar问题的内容如下:

代码语言:javascript
复制
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)

使用上述方法,我无法设置标题名称,而是将文件名的整个路径添加到第一列

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-21 00:16:35

第一个row包含CSV文件的头。在编写新的csv文件时,应该使用第一个writerow来编写头文件。

代码语言:javascript
复制
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函数。这没有提供任何显著的优势,但使我们的代码更简洁。

票数 2
EN

Stack Overflow用户

发布于 2018-05-21 00:15:32

这应该能行

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50440002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档