自动化多个CSV文件的流程

时间:2017-10-09 09:57:30

标签: csv automation

我一直在环顾四周,找不到答案,所以在这里。

我正在尝试自动将CSV文件的内容更改为其他用于机器学习目的的方法。我有这样一行的内容:

0, 0, 0, -2.3145, 5.567...... 65, 65, 125, 70. (516栏)

并尝试将其更改为:

0, 0, -2.3145, 5.567 .... 65, 65, 125, 70. (516行)

所以基本上将数据从水平转换为垂直(单行到单列)。

使用Excel很容易完成,但问题是我有4000多个CSV文件,所以需要花费很多时间。

除此之外,我必须得到前512行并将其存储到另一个文件夹的CSV中,将最后4行添加到另一个文件夹的另一个CSV中,而两个文件具有相同的名称。

例如: 功能(文件夹) 1.CSV 2.CSV ..... 4000 + .CSV

标签(文件夹) 1.CSV 2.CSV ..... 4000 + .CSV

关于如何加快速度的任何建议?尝试编写我自己的程序,但我很难将它从行更改为列。我只设法将单个CSV文件拆分为4000多个。

编辑:

我已经通过将csv行放入数组然后将数组存储到csv中进行测试,其中代码如下所示:

with open('FFTMIM16_512L1H1S0D0_1194.csv', 'r') as f:
    reader = csv.reader(f)
    your_list = list(reader)

    print(your_list[0:512])
    print(your_list[512:516])
    print(your_list)

with open('test.csv', 'w', newline = '') as fa:
    writer = csv.writer(fa)
    writer.writerows(your_list[0:511])

with open('test1.csv', 'w', newline = '') as fb:
    writer = csv.writer(fb)
    writer.writerows(your_list[512:516])

它可以工作,但我只需要在循环中运行它。我不明白的一个问题是,如果我在test.csv上保存0到512的值,它将显示512行数,但是当我从513到516存储到test1.csv时,它只显示3而不是我需要的四行。将fb内容从512更改为516将起作用,这对我没有意义,因为test.csv中512的值为0而test1.csv为69.为什么会这样?从我能理解的是数组的索引,它从0开始到我需要的数字的位置。或者在python中不是这样的情况?

编辑2:

我的新代码如下:

import csv
import os
import glob
#import itertools

directory = input("INPUT FOLDER: ")
output1 = input("FEATURES FODLER: ")
output2 = input("LABELS FOLDER: ")
in_files = os.path.join(directory, '*.csv')

for in_file in glob.glob(in_files):
    with open(in_file) as input_file:
        reader = csv.reader(input_file)
        your_list = (reader)

        filename = os.path.splitext(os.path.basename(in_file))[0] + '.csv'

        with open(os.path.join(output1, filename), 'w', newline='') as output_file1:
                writer = csv.writer(output_file1)
                writer.writerow(your_list[0:512])

        with open(os.path.join(output2, filename), 'w', newline='' ) as output_file2:
                writer = csv.writer(output_file2)
                writer.writerow(your_list[512:516])

它显示了我想要的输出,但现在它存储了撇号和大括号,例如。 ['0.0'],['2.321223']也是如此。如何删除这些?

1 个答案:

答案 0 :(得分:0)

我不明白为什么如果你有4000多件,你可以以编程方式进行编写,只需将每一篇文章写成新的一行?

在我看来,最简单的方法,但不是自动的,是Notepad ++之类的编辑。

在这里你可以替换","通过" \ r \ n"或者如果你想保留","你用",\ r \ n"。

替换它

如果你想让它自动化,我就不会看到一种不那么规划的方式。

顺便说一下......如果你使用python和numpy / scipy,你可以使用.transpose()函数

*编辑您的评论:

你是什么意思"从第一个分到512个"?如果你想要尺寸为512的零件,那就像是:

new_array = []
temp_array = []
k = 0
for num in your_array: 
    temp_array.append(num)
    k += 1
    if k % 512 == 0:
       new_array.append(temp_array)
       k = 0
       temp_array = []

#to append the last block which might not be 512 sized
if len(temp_array) > 0:
    new_array.append(temp_array)

# Save Arrays
for i in len(new_array):
    saveToCsv(array = new_array[i], name="csv_"+str(i)) 

你的new_array现在是一个填充512个大小数组的数组。 可能是错误,我没有测试代码。要保存您只需要一个函数saveToCsf(array,name),它将数组保存到文件中。