复制列,添加一些文本并写入新的csv文件

时间:2017-06-21 17:24:49

标签: python csv

我想制作一个脚本,将第二列从文件夹中的多个csv文件中复制出来,并在将其保存到单个csv文件之前添加一些文本。

这是我想做的事情:

1。)从所有csv文件中获取第二列中的数据

2。)附加文字“你好”& “欢迎”到开头和结尾的每一行

3.)将数据写入单个文件

我尝试使用pandas

创建它
import os
import pandas as pd
dataframes = [pd.read_csv(p, index_col=2, header=None) for p in ('1.csv','2.csv','3.csv')]
merged_dataframe = pd.concat(dataframes, axis=0)
merged_dataframe.to_csv("all.csv", index=False)

问题是 -

  1. 在上面的代码中,我不得不手动提到文件名这是非常困难的,因为我需要包含所有csv文件的解决方案*.csv

  2. 需要使用类似writr.writerow(("Hello"+r[1]+"welcome"))

  3. 的内容
  4. 由于每个文件中有多个行(大约100k)的csv文件,所以我也需要加快速度。

  5. 以下是csv文件的示例:

     "1.csv"        "2.csv"            "3.csv"
      a,Jac          b,William          c,James
    

    以下是我希望输出看起来像all.csv:

    Hello Jac welcome
    Hello William welcome
    Hello James welcome
    

    使用.merge() .append().concat() ??

    的任何解决方案

    如何使用python实现这一目标?

3 个答案:

答案 0 :(得分:2)

你不需要大熊猫。这是使用csv

执行此操作的一种非常简单的方法
import csv
import glob


with open("path/to/output", 'w') as outfile:
    for fpath in glob.glob('path/to/directory/*.csv'):
        with open(fpath) as infile:
            for row in csv.reader(infile):
                outfile.write("Hello {} welcome\n".format(row[1]))

答案 1 :(得分:0)

1)如果您想要导入文件夹中的所有.csv文件,可以使用

for i in [a in os.listdir() if a[-4:] == '.csv']:
    #code to read in .csv file and concatenate to existing dataframe

2)要附加文本并写入文件,您可以将函数映射到数据框的第2列的每个元素以添加文本。

#existing dataframe called df
df[df.columns[1]].map(lambda x: "Hello {} welcome".format(x)).to_csv(<targetpath>)
#replace <targetpath> with your target path

有关您可以传递到to_csv的所有参数,请参阅http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.Series.to_csv.html

答案 2 :(得分:0)

这是一个使用内置csv模块的非熊猫解决方案。不确定速度。

import os
import csv

path_to_files = "path to files"
all_csv = os.path.join(path_to_files, "all.csv")
file_list = os.listdir(path_to_files)

names = []

for file in file_list:
    if file.endswith(".csv"):
        path_to_current_file = os.path.join(path_to_files, file)

        with open(path_to_current_file, "r") as current_csv:
            reader = csv.reader(current_csv, delimiter=',')

            for row in reader:
                names.append(row[1])

with open(all_csv, "w") as out_csv:
    writer = csv.writer(current_csv, delimiter=',')

    for name in names:
        writer.writerow(["Hello {} welcome".format(name))