如何使用Python

时间:2018-01-23 18:59:25

标签: python csv append rows

我正在使用Python 3&我无法将多个csv文件中的行附加到Master_Total.csv文件的多行中。我怀疑这是由于每个csv文件没有“预先存在的”空行。如果是这样,我如何向每个TOTAL.csv文件添加一个新的空白行?

TOTAL.csv文件:

GND, 0.1V, 1.0V, REFKelvin,
0.000000, 0.100436, 1.003407,  150318.406250,
[no empty row]

enviro.csv文件:

temp [C], pressure [kPa], humidity [%RH]
23.870001, 85.903000, 33.75244
[empty row]

当我运行我的脚本时,我得到了这个:

Master_Total.csv

GND, 0.1V, 1.0V, REFKelvin,
0.000000, 0.100436, 1.003407,  150318.4062500.000000, 0.100764, 1.005011, 100.3399580.000019, 0.100252, 1.002642, 100.214996...

Master_enviro.csv

temp [C], pressure [kPa], humidity [%RH]
23.870001, 85.903000, 33.752441
23.760000, 85.914001, 32.997131
24.040001, 85.879997, 33.134460
...

代码:

import shutil, glob, csv, os, sys



path = r'directory'
Enviro_Files = glob.glob(path +"**/*enviro.csv")
Total_Files = glob.glob(path +"**/*TOTAL.csv")

with open('directory_desktop/Master_enviro.csv', 'wb') as outfile1:
    for i, filename1 in enumerate(Enviro_Files):
        with open(filename1, 'rb') as inputfile1:
            if i != 0:
                inputfile1.readline()
            shutil.copyfileobj(inputfile1, outfile1)
            print(filename1 + " has been imported.")
with open('directory_desktop/Master_TOTAL.csv', 'wb') as outfile2:
    for h, filename2 in enumerate(Total_Files):
        with open(filename2, 'rb') as inputfile2:
            if h != 0:
                inputfile2.readline()
            shutil.copyfileobj(inputfile2, outfile2)
            print(fname2 + " has been imported.")

1 个答案:

答案 0 :(得分:1)

如果您使用Python的CSV库,您可以轻松进行测试以确保给定的行中包含值,这样如果没有空行则无关紧要,它们将被忽略写主文件:

import csv
import glob

def merge_csvs(target_filename, csv_list):
    with open(target_filename, 'w', newline='') as f_master_target:
        csv_master_target = csv.writer(f_master_target)
        write_header = True

        for csv_filename in csv_list:
            with open(csv_filename, 'r', newline='') as f_single:
                csv_single = csv.reader(f_single)
                header = next(csv_single)

                if write_header:
                    csv_master_target.writerow(header)
                    write_header = False

                for row in csv_single:
                    if row:
                        csv_master_target.writerow(row)


path = 'directory'
Enviro_Files = glob.glob(path + "**/*enviro.csv")
Total_Files = glob.glob(path + "**/*TOTAL.csv")

merge_csvs('Master_enviro.csv', Enviro_Files)
merge_csvs('Master_TOTAL.csv', Total_Files)