各位亲
如何在一个文件夹下面对所有csv文件里面增加一列,一列为csv文件的名字
网上找了段代码改了一下,有报错 哭脸
谢谢!
import numpy as np
import openpyxl as op
import pandas as pd
import glob
import os
from pathlib import Path
# coding: utf-8# 给每个excel中的sheet增加一列,值为excel名.xlsxfrom pathlib import Pathimport pandas as pd
path = Path(r'D:\dream\BD2\test_data_X')
#path = r'D:\dream\BD2\test_data_X'
excel_list = [(i.stem, pd.concat(pd.read_excel(i, sheet_name=None))) for i in path.glob("*.csv*")]
data_list = []
for name, data in excel_list:
print(name)
print(data)
data['表名'] = name
data_list.append(data)
result = pd.concat(data_list, ignore_index=True)
result.to_excel(path.joinpath('给每个excel中的sheet增加一列,值为excel名.xlsx'), index=False, encoding='utf-8')
print('添加和合并完成!')
参考GPT:在您的代码中,您正在尝试读取csv文件,但是使用的是pd.read_excel方法,应该使用pd.read_csv方法来读取csv文件。此外,您还需要将data_list.append(data)移动到for循环中,否则只有最后一个csv文件的数据会被添加到data_list中。最后,您需要将to_excel中的文件名更改为您想要的新文件名,例如使用.name属性添加.csv后缀名作为新列的名称。
下面是修改后的代码:
import pandas as pd
from pathlib import Path
path = Path(r'D:\dream\BD2\test_data_X')
csv_list = [i for i in path.glob("*.csv")]
data_list = []
for csv_file in csv_list:
name = csv_file.name[:-4] # get the file name without the .csv extension
data = pd.read_csv(csv_file)
data['表名'] = name
data_list.append(data)
result = pd.concat(data_list, ignore_index=True)
result.to_csv(path.joinpath('new_file_with_csv_names.csv'), index=False, encoding='utf-8')
print('添加和合并完成!')
这将读取指定路径下的所有csv文件,并为每个文件添加一个名为"表名"的新列,该列的值为文件的名称(不带.csv扩展名)。然后将所有数据合并到一个DataFrame中,并将其保存到名为"new_file_with_csv_names.csv"的文件中。
该回答引用于gpt与OKX安生共同编写:
您好,根据您提供的信息,可以尝试以下代码实现为csv文件增加一列,该列为csv文件的名字:
import pandas as pd
import os
directory = 'your_directory_path'
for file in os.listdir(directory):
if file.endswith(".csv"):
file_path = os.path.join(directory, file)
df = pd.read_csv(file_path)
df['file_name'] = file
df.to_csv(file_path, index=False)
这段代码会遍历指定目录下的所有csv文件,然后使用pandas读取每个文件,并在DataFrame对象中添加一个名为'file_name'的新列,其值为当前处理的文件名。最后,使用to_csv()方法将修改后的数据保存回原始csv文件中。
请注意替换代码中的your_directory_path为您想要遍历的csv文件所在的目录路径。
import pandas as pd
import os
csv_folder = u"/path/to/csv/folder" # csv文件夹的路径
for file in os.listdir(csv_folder):
if file.endswith(".csv"):
file_path = os.path.join(csv_folder, file)
df = pd.read_csv(file_path) # 读取csv文件
df.insert(0, u"filename", file.split(".")[0]) # 插入新列
df.to_csv(file_path, index=False) # 写入csv文件
请注意,在处理文件路径和文件名时,应使用Unicode字符串,否则可能会出现编码问题。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这里有一个修改后的代码,可以逐个处理每个csv文件,并在其每行添加一列,该列值为该csv文件的文件名:
import pandas as pd
import os
# 获取文件夹下所有csv文件的路径
folder_path = r'D:\dream\BD2\test_data_X'
csv_files = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith('.csv')]
# 对每个csv文件进行处理
for csv_file in csv_files:
file_name = os.path.basename(csv_file) # 获取csv文件名
df = pd.read_csv(csv_file) # 读取csv文件
df['文件名'] = file_name # 在每行添加文件名列
df.to_csv(csv_file, index=False) # 保存修改后的csv文件
这里使用了os
库获取文件夹下所有csv文件的路径,使用pandas
库读取每个csv文件,然后在每行添加一个文件名列并保存修改后的csv文件。注意,这里默认第一行为表头。
如果我的回答解决了您的问题,请采纳!
关于csv文件增加一列 为csv文件的名字,代码报错的问题,已经为您修改,测试可用,有详细的注解。望采纳!!
import pandas as pd
import os
path = r'D:\dream\BD2\test_data_X'
data_list = pd.DataFrame()
for root, dirs, files in os.walk(path):#循环查找指定目录下的文件
if files:#如果目录下有文件
for file in files: #循环所有查找到的文件
if file.lower().endswith('csv'):#如果文件是csv文件,则处理,否则不处理
path = os.path.join(root, file)
data = pd.read_csv(path,encoding='utf8')#读取csv文件
data['表名'] = file #将文件名作为一列添加进去,并且最会一列的名称为 ’表名‘
#将多个csv文件的数据数据合并到一起
data_list = pd.concat([data_list,data], ignore_index=True)
#最终所有的csv文件整合为一个文件
data_list.to_excel(os.path.join(path, 'output.csv'), index=False, encoding='utf8')
print('添加和合并完成!')
搞定了没,可以借鉴下
import csv
with open("C:\\Users\\hanhan\\PycharmProjects\\pythonProject\\file1.csv") as csvFile:
rows = csv.reader(csvFile)
with open(("C:\\Users\\hanhan\\PycharmProjects\\pythonProject\\file2.csv"), 'w') as f:
writer = csv.writer(f)
for row in rows:
row.append('123456')
writer.writerow(row)