微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我打开了许多 csv 文件,现在我需要将这些文件的名称添加到

如何解决我打开了许多 csv 文件,现在我需要将这些文件的名称添加到

我在文件夹中有很多 csv 文件名称如 XCV123.csv XCF456.csv、DFT456.csv 等。我打开它们并另存为一个,但我看到没有这些文件名称.csv DF 如下所示(当然一个 csv 有很多行):

A B C 
1 2 3 
5 2 3
6 5 2

所以我要找的是这样的 DF 或 CSV

A B C Name
1 2 3 XCV123
5 2 3 XCF456
6 5 2 DFT456

我用代码打开了这个:

import pandas as pd
from glob import glob

with open('/opt/home/main.csv','a') as singleFile:
    for csv in glob('*.csv'):
        if csv == 'main.csv':
            pass
        else:
            for line in open(csv,'r'):
                singleFile.write(line)

但我必须在此代码添加一些内容,我不知道是什么...感谢您的帮助!

最好的问候

解决方法

我在这里假设:

  • 您所有的 csv 文件都具有相同的标题
  • 您所有的 csv 文件都有相同的分隔符:逗号
  • 您可以在 csv 文件中使用带引号的字段
  • 您可以在每次运行时删除文件

然后,您可以将代码更改为:

# use mode wb to control end of lines and overwrite the output file
with open('/opt/home/main.csv','wb') as singleFile:
    do_header = True                 # add 1! header
    for csv in glob('*.csv'):
        if csv == 'main.csv':
            pass
        else:
            with open(csv,'rb') as file:
                line = next(file)
                if do_header:         # only on first pass
                    singlefile.write(line.rstrip() + b',Name\r\n')
                    do_header = False
                for line in file:
                    singlefile.write(line.rstrip() + ',"{}"\r\n'.format(csv).encode())
            singleFile.write(line)
,

使用 pandaspathlib

您可以在 pathlib 对象上使用 .stem 来返回不带扩展名的文件名。

import pandas as pd
from pathlib import Path

files = Path('/to/csv/files').glob('*.csv') #rglob if you have sub directories.

dfs = pd.concat([pd.read_csv(file).assign(Name=file.stem) for file in files])

dfs.to_csv('singleFile.csv',index=False)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。