【问题标题】:Automating a process for multiple CSV file自动处理多个 CSV 文件
【发布时间】:2017-10-09 09:57:29
【问题描述】:

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

我正在尝试寻找一种自动将 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 时,它只显示三个而不是我需要的四行。将 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'] 也是如此。如何删除这些?

【问题讨论】:

    标签: csv automation


    【解决方案1】:

    我不明白,如果你有 4000 多件作品,为什么不能以编程方式完成,而只是将每一件作品都写在一个新的行中?

    在我看来,最简单但不是自动的方法是像Notepad ++ 这样的编辑器。

    您可以在此处将“,”替换为“\r\n”,或者如果您想保留“,”将其替换为“,\r\n”。

    如果您希望它自动化,我看不到非编程方式。

    顺便说一句...如果您使用带有 numpy/scipy 的 python,您可以使用 .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) 将数组保存到文件中。

    【讨论】:

    • 我从未尝试过python,所以我会看看我是否可以做到。感谢您的建议。我确实在 Notepad++ 中看到过这种方法,之前我认为这会有点麻烦,而不是 Excel,您只需右键单击并转置即可。我真的只是读/写的编程技巧很差。这就是为什么我只使用 .txt 文件但从未做过这样的事情的原因。抱歉,添麻烦了。我会及时通知你。
    • 天哪。我发现 python 比 java 更容易实现自动化。谢谢。
    • 转置现在有效。我只需要弄清楚如何将行从第一行拆分到第 512 行。有什么建议可以查看它吗?
    • 我的意思是我有 516 行。我试图查看将值存储到数组中是否允许我将 1 到 512(512)的行存储到第二个 .csv 文件,以及将 513 到 516(4 行)的行存储到第三个 .csv 文件。如果不是很清楚,我很抱歉。
    • 这正是上面的代码应该做的 :) 你只需要遍历你的新数组并将每个数组保存在一个 csv 文件中。 '将更新代码。
    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2016-06-25
    • 2015-09-18
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多